12. januar 2009 - 11:32Der er
10 kommentarer og 2 løsninger
Forklaring af sessions.
Hejsa.
Jeg er netop begyndt at kigge på at lære mig lidt PHP og er gået i gang med et login script. - Scriptet virker fint, men jeg har dog lidt problemer med at forstå hvordan sessions i PHP virker.
Jeg har googlet og læst en masse og har da også nogenlunde styr på det, men der melder sig stadig nogle spørgsmål, som jeg nok bedst kan formulere ved at liste dem:
1) En session slutter når man lukker sin browser(?) - Men Hvordan f..... ved serveren om jeg har lukket min browser eller ej?
2) Hvordan genkender serveren den browser der oprindeligt satte sessionen? - Hvis jeg har åbnet safari og er logget ind på min side husker den sessionen, men hvis jeg åbner firefox ved siden af og går ind på siden og spørger til samme session er den (selfølgelig) ikke til at finde.. Dette er jo netop pointen, men jeg forstår det stadig ikke helt da jeg har forstået det sådan at sessionen er gemt i hukommelsen på serveren, og derfor egentlig ikke har noget med klienten at gøre.. men det har det jo så åbenbart alligevel. (Det jeg nok spørger til her er hvordan serveeren genkender mig, når jeg spørger til om en session er sat for mig.. Er sessionen også gemt i browseren på en måde?)
3) Så vidt jeg har kunnet læse mig til bør en sådan session time out efter 24 min. hvor du intet har foretaget dig på siden. Dette lader dog ikke til at på min side.. Jeg kan fint efterlade min computer i flere timer, komme tilbage og refreshe min side, og er stadig logget ind?
1: En server ved ikke om browseren er død, lukket eller lign. Den sætter en levetid på en session, f.eks. 10 minutter, efter de 10 minutter, så er session'en ikke længere gældende.
2: En session huskes ved at sende en session cookie frem og tilbage. F.eks.: 123u321h3h21u321h3u123, hvis jeg fortæller dig (browseren) at du skal give mig den igen ved næste side visning, så kan jeg holde styr på om du er dig eller en anden browser.
1) Det gør den heller ikke. Men din browser gemmer en cookie med et unikt session-ID. Det er denne cookie, der kun "lever" så længe browseren er åben. Derfor vil serveren ikke blive præsenteret for samme session-ID igen (med mindre der er tale om session-hijacking, hvilket vi ikke skal rode os ud i nu). På serveren har session-ID'et desuden en levetid, hvorefter det falder dog garbage collection.
2) Ad pkt. 1 - browseren gemmer session-ID'et og sender det med ved hver forespørgsel. Det er således "per browser" ikke "per computer".
Ahh.. se det var det med at der blev sat en cookie i browseren jeg ikke havde forstået.. Nu giver det hele mening! - Mange tak.
(Bare lige for Prins Knud.. Det vil altså sige at sessions ikke virker hvis man har slået cookies fra i sin browser, eller hvis browseren ikke understøtter disse?)
Både og - i nogle tilfælde kan session-ID'et i stedet overføres gennem URL'en. Det sker fra tid til anden her på Eksperten, hvor du kan se ?EID=... (eller noget i den stil) på links.
Prøv at kikke i din php.ini Her er forskellige settings for brug af sessions
F.eks. session.use_trans_sid = 0 Hvis den er sat til 1, vil sessionid "følge med" i hvert link, og som hiddenfelt i formularer.
Det igen er url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset=" som bestemmer hvor den følger med.
Hvis session.use_trans_sid er sat til 1, og session.use_cookies også er sat til 1 ( som er default ), er det kun ved første load af siden, at sessionid "følger med". Når php har registreret en session cookie, så bruges den i stedet for at sende session id med rundt.
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.