Avatar billede kongknabe Nybegynder
12. januar 2009 - 11:32 Der 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?

På forhånd tak :)
Avatar billede jakobdo Ekspert
12. januar 2009 - 11:35 #1
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.

3: Det er server afhængigt.
Avatar billede jensgram Nybegynder
12. januar 2009 - 11:35 #2
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".
Avatar billede jensgram Nybegynder
12. januar 2009 - 11:35 #3
Kage!
Avatar billede jensgram Nybegynder
12. januar 2009 - 11:36 #4
3) Ja, som jakobdo skriver: Det er et spørgsmål om, hvordan din server er opsat til at håndtere garbage collection.
Avatar billede kongknabe Nybegynder
12. januar 2009 - 12:07 #5
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?)

Point til dem der vil have :)
Avatar billede jensgram Nybegynder
12. januar 2009 - 12:23 #6
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.

Serveren skal naturligvis understøtte det.
Avatar billede jensgram Nybegynder
12. januar 2009 - 12:23 #7
Jeg smider et svar, men jakobdo var hurtigst, så han må have førsteret :)
Avatar billede jakobdo Ekspert
12. januar 2009 - 12:39 #8
Svar og jeg deler nu gerne. :o)
Avatar billede showsource Seniormester
12. januar 2009 - 12:40 #9
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.
Avatar billede kongknabe Nybegynder
12. januar 2009 - 12:45 #10
Nu gav jeg jer begge point (Troede egentlig i begge ville få 30).

Takker mange gange for de gode og hurtige svar :)
Avatar billede jakobdo Ekspert
12. januar 2009 - 12:45 #11
Takker for point.
Avatar billede jensgram Nybegynder
12. januar 2009 - 14:33 #12
Velbekomme
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