Avatar billede heyn Nybegynder
03. februar 2006 - 10:33 Der er 6 kommentarer og
1 løsning

Fra begynderen: Hvordan fungerer session_start() og -destroy()

Hej Alle

Fordi jeg øjensynlig ikke helt fatter sessions lavede jeg følgende test. I dokumentet test_start.php skrev jeg:
<?php
session_start();
session_destroy();
?>
Dette fungerede som jeg forventede. Et sessionsobjekt blev oprettet og derefter slettet i C\:...\PHP\sessiondata\.
Skrev jeg derimod:
<?php
session_start();
?>
<html><head></head><body>
<form action="test_dest.php" method="get">
<input value="opdater" type="submit">
</form>
</body></html>

og i test_dest.php skrev:
<?php
session_start();
session_destroy();
?>
Oprettede test_start.php et sessionsobjekt, men ses_dest.php slettede ikke objektet.

Burde dette ikke ske?

Mvh Christian
Avatar billede _eksperten_ Nybegynder
03. februar 2006 - 18:00 #1
Jeg er ikke sikker, men måske er det fordi den mister SessionID undervejs.
Du kan prøve at sende dit sessid med:

action="test_dest.php?<? echo session_name()."=".session_id(); ?>"
Avatar billede johan.o Nybegynder
03. februar 2006 - 20:31 #2
Hvis ses_dest.php opretter en ny session og ikke 'fanger' den du opretter i test_start.php, så kan problemet ligge i hvordan serveren er sat op til at sende session's id'erne til browseren eller problemet kan ligge i din browser som måske ikke accepterer cookies.

Men hvis du tester hos en udbyder burde serveren jo være sat korrekt op, tester du derimod lokalt kan det være du skal vise indholdet af din php.ini (Den del der har med sessions at gøre) :)

Mvh. Johan
Avatar billede heyn Nybegynder
06. februar 2006 - 11:17 #3
>> "eksperten".
Din ide med at overføre PHPSESID fungerede. Min løsning blev:

<form action="test_dest.php" method="post">
<input name="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>" type="hidden">"
<input value="opdater" type="submit">
</form>

Jeg har tjekket ved at indsætte følgende i både test_start.php og test_dest.php
echo "session_name() = ".session_name()."<br>\n";
echo "session_id() = ".session_id()."<br>\n";
Nu kan jeg teste om en session kører på en side ved at gemme session_id() i DB når den startes og senere når andre åbner kan jeg bruge:

if (file_exists(session_save_path()."\sess_".$sessID))

Hvor $sessID er sessionID hentet fra db.

Smider du et SVAR 'eksperten'?

>>johan.o
Jeg kører lokalt.
Jeg anvender ikke cookies. Netop for at undgå problemer med browsere der blokerer for disse.
Hvis der er andre løsninger end den 'eksperten' foreslår så må problemt vel ligge i php.ini. Jeg har lavet følgende forandringer til standard php.ini:
session.use_cookies = 0
session.gc_probability = 100
session.gc_maxlifetime = 86400
session.save_path= C:\programmer\PHP\sessiondata
Er der nogen nemmere løsning end den med formen?

Mvh Christian
Avatar billede _eksperten_ Nybegynder
06. februar 2006 - 17:09 #4
Jeg er glad for at det virkede :)
Og tak for point!
Avatar billede _eksperten_ Nybegynder
06. februar 2006 - 17:09 #5
...
Avatar billede johan.o Nybegynder
06. februar 2006 - 17:37 #6
heyn --> 'Er der nogen nemmere løsning end den med formen?'

Ja, der er nemmere løsninger, men er det også bedre løsninger...? :)

Umiddelbart vil jeg sige at der er tre måder du kan holde styr på dit session id.

1.: Via cookies.
2.: Via URL'en.
3.: Via 'manuelt' indsat form felt.

Cookies ville du jo gerne undgå, og 3'eren er jo noget lignende det du har vist herover.

Via URL'en bliver session id automatisk tilføjet til URL'en så længe det er en relativ URL, det vil sige hvis du f.eks. indsætter et link til http://www.dmi.dk så vil brugerens session id ikke blive vedhæftet, da det jo ikke er en relativ URL, og derfor mener serveren at det er et eksternt site, som jo ikke har brug for brugerens session id. Så første betingelse hvis du vil bruge denne metode er at alle links til dine egne sider skal være relative.

I php.ini skal du sætte : session.use_trans_sid = 1 for at det virker.

Men ulemperne ved denne metode er bl.a. at en bruger kan sende sit eget session id til en anden bruger. F.eks. besøger en bruger en side på dit site som han syntes en anden også skal se, så han kopiere det der står i URL'en.....inklusiv sit eget session id....og sender det til den anden bruger. Når denne bruger så besøger siden har han den første brugers session id. Derudover kan brugere også gemme links i deres foretrukne hvor session id er vedhæftet.

Det virker som om du prøver at undgå nogle ting i styringen af din session. Har du prøvet at sætte en session variabel på den ene side, og så se om den findes på den næste ?

Mvh. Johan
Avatar billede heyn Nybegynder
07. februar 2006 - 09:12 #7
>> johan.o

Det er lidt pinligt. Jeg bliver vist desvære alligevel nødt til at droppe sessions.
Årsagen kan på http://www.eksperten.dk/spm/685715 .
Problemet drejede sig om brugerrettigheder.
Jeg bliver desvære nok bare nødt til at registrere 'siden er i anvendelse' i DB.

Mvh Christian
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester