WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   php: session_destroy() (https://www.wn.se/forum/showthread.php?t=14082)

tartareandesire 2006-05-15 01:52

Citat:

Ursprungligen postat av martine
Citat:

Ursprungligen postat av tartareandesire
Du har redan fått svaret....

?????
Ännu en menlöst inlägg? Om du inte kan svara på frågan så behöver du inte göra fler inlägg.
Edit: Om det finns någon som VET något och inte bara har åsikter så får ni gärna fortfarande svara på frågan.


Om du läser Jonas' inlägg och min bekräftelse så har du svaret där...

martine 2006-05-15 13:17

Okej. Ett sista försök även om jag nog bara slösar bort min tid på det här. Jag antog från början såsom Jonas att session_destroy() måste kallas innan sidan skickas. Men om man läser php:s dokumentation för funktionen så står det inget om detta för session_destroy() till skillnad från för session_start etc. (Jag har redan påpekat detta i svarsinlägget på Jonas inlägg) Jonas skriver att session_destroy() har "all anledning", inte att den faktiskt gör eller måste. Jonas påpekar också att session_destroy() måste ta bort cookie:n, vilket är felaktigt vilket också står uttryckligt i php:s dokumentation (även detta har jag påpekat i svarsinlägget). Zoran skriver däremot att det "borde fungera" vilket verkar sannolikare.

Citat:

Originally posted by tartareandesire@May 15 2006, 01:52
Om du läser Jonas' inlägg och min bekräftelse så har du svaret där...
Suck. Din "bekräftelse" och dina övriga inlägg i tråden har inte hjälp mig mycket vidare.
tartareandesire: Eftersom du så ivrigt förespråkar Jonas åsikt så hoppas jag du nu tydligt och klart kan förklara för mig varför den är så solklar och var du har belägg för detta (har du testat?, står det i php-dokumentationen någonstans? eller tycker du bara att det är så?)

PS Jag tackar Jonas och Zoran för era meningsfulla inlägg även om de inte hjälpt mig till en lösning.

zoran 2006-05-15 13:53

Citat:

Ursprungligen postat av martine
Okej. Ett sista försök även om jag nog bara slösar bort min tid på det här. Jag antog från början såsom Jonas att session_destroy() måste kallas innan sidan skickas. Men om man läser php:s dokumentation för funktionen så står det inget om detta för session_destroy() till skillnad från för session_start etc. (Jag har redan påpekat detta i svarsinlägget på Jonas inlägg) Jonas skriver att session_destroy() har "all anledning", inte att den faktiskt gör eller måste. Jonas påpekar också att session_destroy() måste ta bort cookie:n, vilket är felaktigt vilket också står uttryckligt i php:s dokumentation (även detta har jag påpekat i svarsinlägget). Zoran skriver däremot att det "borde fungera" vilket verkar sannolikare.

Citat:

Ursprungligen postat av tartareandesire
Om du läser Jonas' inlägg och min bekräftelse så har du svaret där...

Suck. Din "bekräftelse" och dina övriga inlägg i tråden har inte hjälp mig mycket vidare.
tartareandesire: Eftersom du så ivrigt förespråkar Jonas åsikt så hoppas jag du nu tydligt och klart kan förklara för mig varför den är så solklar och var du har belägg för detta (har du testat?, står det i php-dokumentationen någonstans? eller tycker du bara att det är så?)

PS Jag tackar Jonas och Zoran för era meningsfulla inlägg även om de inte hjälpt mig till en lösning.

Alltså, det där att session_destroy() skulle ta bort kakor via headrar stämmer inte. session_destroy förstör data associerad med sessionen, men den nolställer inte några globala variabler associerade med sessionen. (Enligt dokumentation). För att ta bort kakor bör man använda setcookie().

För övrigt, jag förstår att det är svårt att sitta och implementera en lösning i en webbshop på 5 ställen bara för att se att den fungerar.

Men att göra en fil index.php
Kod:

<?
session_start();
$_SESSION['username'] = "Foobar";
?>
Hej kära <? echo $_SESSION['username']; ?>
<br >
Nu ska vi testa om jag kan döda dig<br>
<?
session_destroy();
?>
Jag undrar om du lever <? echo $_SESSION['username']; ?><br>

... är inte så svårt. Där får du se 1. att session_destroy inte mixtrar med headrar, och 2. att $_SESSION['username'] är fortfarande definierad, trots att session_destroy förstört all data associerad med den.

Du behöver kalla unset() också eller göra en $_SESSION = array(); innan du dödar sessionen för att nollställa det.

/Zoran

tartareandesire 2006-05-15 15:12

Får byta åsikt i frågan. Zoran har rätt måste jag erkänna (har testat själv). Att man skulle ta bort cookies stämmer inte (det går så vitt jag vet fortfarande inte att göra på annat vis än med timer / per automatik?). Ber så mycket om ursäkt om jag missledde någon. När jag har använt metoden själv så har jag alltid velat sätta igång en ny session efter att ha förstört den tidigare och då finns det ingen annan möjlighet än att köra det först i filen efter session_start skickar headers.

Men, som sagt var, detta hade varit enkelt att testa själv, man behöver och bör nog inte lägga det i någon fil som används på sidan innan man vet hur det funkar.

martine 2006-05-15 16:21

Alltså: Poängen med min fråga var inte att sätta igång en debatt om hur enkelt eller snabbt/svårt det är att prova. Jag trodde att det fanns någon här på forumet som tidigare stött på problemet och kunde ge ett snabbt och bra svar. I så fall hade det gått snabbare än både den här utdragna debatten och att själv testa. Att man kan testa själv kunde jag ju räkna ut själv.

Zoran: tack för ett ytterligare klargörande. Dessvärre räcker det förstås inte att bara göra en php-sida. Det intressanta är förstås inte om den blir kvar i den globala variabeln, det spelar ju ingen roll. Frågan är ju om användaren går tillbaks till webshoppen om allt då är raderat. Sessions-id kommer ju vara detsamma, men det bör ju inte spela någon roll. Det var mer sånt runt omkring som inte är så snabbt att testa som jag var nyfiken på. Det är ju lätt att dra snabba slutsatser av ett litet exempel man själv gör, det är en annan sak att få ett svar av någon som själv redan använt det i praktiken på flera sidor. Hursomhelst, saken verkar ju vara klar nu. Jag får väl ta och implementera det och se hur det går.

tartareandesire: Jag kan inte låta bli att säga att snabba snorkiga svar av typen "Just det, så är det.", "Testa själv." och "Du ser ju va det står." är både meningslösa och frustrerande och bättre lämnas osagda. Man behöver ju inte säga (skriva) allt man tänker.

Vet inte vad för regler som gäller här men att en del frågor uppfattas som korkade eller självklara för vissa betyder inte att de är det för alla. Att jag fick två helt olika svar på en fråga visar ju i alla fall att det ingalunda var en fråga med ett självklart svar. Om man resonerar att man ska prova istället för att fråga så vore ju hela forumet onödigt eftersom allt som har med web att göra kan man ju testa själv. Men för att vara rättvis: Detta kanske inte var det rätta forumet för frågan, ett php-forum kanske hade varit bättre.

zoran 2006-05-16 10:19

Jo, men du får rätt bra med svar i och med testet jag skrev. Om du tänker på hur du lagrar din varukorg kommer du ändå kunna lista ut vad som händer.

Exempelvis: om du lagrar $_SESSION['basketid'] med id från mysql där man hittar kundens varukorg, så är det givet att kunden kommer fortfarande se sin varukorg (eftersom $_SESSION['basketid'] inte nollställs).

Är du ute att döda sessionen helt, så är endast session_destroy() fel väg. Du måste även göra $_SESSION = array();. Då kommer din session försvinna helt.

Att folk protesterar mot enkla frågor är följande. Du anger att du håller på att jobba med en webbutik. Enligt min, och förmodligen många andras, åsikt, är det grejer som är tämligen avancerade. Så vi förutsätter att du har kunskap som ligger en bra bit över 10-åringens html-kunskaper. Om en lösning är enkel att komma på själv, är det bättre att stimulera ens egen vilja att göra det än att servera på ett fat. Du har väl inte lärt dig allt genom att få allt serverat.

Just i det här fallet är ju ett test otroligt simpelt. Dels för din egen skull, och för att hålla något så när hög kvalite på forumet för "proffesionella webbmasters", vill man "lära" folk hur de hittar en lösning istället för att servera lösningen själv. Jag själv brukar alltid ta den vägen även när det kommer till andra saker. Jag själv lyssnar gärna på såna råd än att få lösningen i knät.

martine 2006-05-16 11:39

Håller i stort med om vad du säger. Även jag önskar ju ett forum hög kvalité. Just nu känns åtminstone den här tråden som tramsande 3åringar. Vad jag efterfrågade var erfarenheter och bra lösningar för hantera kunder på ett bra sätt, och som du vet skrivs det hela böcker om hur man gör detta på bästa sätt. Det är klart att jag vet hur sessions fungerar men eftersom att kalla session_destroy() i slutet av skriptet är en lite ovanlig lösning och undrade därför om någon hade praktisk erfarenhet av detta (jag skulle antagligen uttryckt mig tydligare i frågan). Du nämner själv att det handlar om tämligen avancerade grejer och även små förändringar kan ställa till större problem någon annanstans i kedjan. Jag tycker då att det är rimligt att man drar nytta av erfarenheter som andra professionella webdesigners har och det handlar inte om ren lathet.

Dessutom ställs det ju en hel del ytterst simpla frågor om t ex css och js här som man enkelt skulle kunna läsa i vilken grundläggande bok som helst, men jag tycker det är vettigare att svara om man vet något och har tid och lust, än att bara slänga in något inlägg om "det kan du läsa i en bok" eller "det var en löjlig fråga". Alla har ju olika kunskaper och erfarenheter och att man är utbildad eller har arbetserfarenhet betyder inte vet allt eller ens alltid ser det självklara. Om man ska vara säker på att slippa dumma fråger lär man behöva ha betydligt hårdare regler för att få skriva på forumet, för min del verkar det vara en hel del hobbyknåpare och folk som fortfarande går någon utbildning som är medlemmar här, inget fel med det tycker jag men då kan man ju inte förvänta sig forumet håller elitkvalité...

Om alla ska lägga ner tid på att ständigt meddela sina åsikter om inlägg och frågor så blir det bara sandlåda av forumet. Dumma frågor är bättre att ignorera än inleda långa debatter om vad, hur och vem som ska skriva vad.

Citat:

Originally posted by zoran@May 16 2006, 10:19
Är du ute att döda sessionen helt, så är endast session_destroy() fel väg. Du måste även göra $_SESSION = array();. Då kommer din session försvinna helt.
Jo, det är ju solklart. Skrev ju i förra inlägget att det inte spelar någon roll om det globala variabeln ($_SESSION) överlever skriptet. Det är ju först på nästa sida som man vill vara säker på att den inte innehåller data från den "förra sessionen" med samma cookie-id. Hur som helst det är inte så mycket att orda mer om. Jag får prova, det borde ju fungera.

guran 2006-05-20 20:50

Det är lite svårt att tolka vad du är ute efter. Alla anrop till en server från en webbläsare skapar en session. Om du vill att den sessionen ska lagra data på servern måste du starta en sådan session vilket du gör med session_start(). Du måste tala om för servern att det finns sessionsdata att hämta vilket du gör med session_start().

Att starta en session innebär inte att du måste avsluta den med session_destroy(). Du använder session_destroy() när du vill avsluta lagringen av sessionsdata. Ett sådant fall är t.ex. när en användare loggar ut från att ha varit inloggad. För att vara säker på att de data du har i sessionen verkligen försvinner med omedelbar verkan nollställer du dem med t.ex. $_SESSION = array() och därefter anropar du session_destroy().

Vill du ta bort själva sessionen måste du även nollställa sessions-kakan t.ex. genom följande: setcookie(session_name(), '', time()-42000, '/'). Därefter anropar du session_destroy().

martine 2006-05-20 21:28

Jodå jag känner till vad du skrev ovan, problemet är inte att jag inte hur man gör eller vad som händer.

Citat:

Originally posted by guran@May 20 2006, 20:50
Du använder session_destroy() när du vill avsluta lagringen av sessionsdata. Ett sådant fall är t.ex. när en användare loggar ut från att ha varit inloggad. För att vara säker på att de data du har i sessionen verkligen försvinner med omedelbar verkan nollställer du dem med t.ex. $_SESSION = array() och därefter anropar du session_destroy().
Min (tydligen otydliga) fråga var egentligen om det kan finnas några problem med att bara kalla session_destroy() i slutet av skriptet utan att "tömma" $_SESSION:s-variabeln och utan att radera sessionskakan (vilket man inte längre kan göra i slutet av skriptet eftersom headern redan har sänts). session_destroy() raderar ju datan på serverns hd vilket borde räcka för att ta död på sessionen. Hursomhelst, frågan kan nu betraktas som löst.


Alla tider är GMT +2. Klockan är nu 20:38.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson