Session dør ikke

Tags:    php

Goddag udviklere.

Jeg har et problem med en PHP-session, som ikke bliver "destroyed", hvis brugeren bare surfer væk fra siden, uden at trykke på "Logout".

Dette er den kode, som udføres når brugeren trykker logout (hvis I kan bruge det til noget):

Fold kodeboks ind/udPHP kode 


Denne kode bliver ikke udført, hvis brugeren bare surfer videre, hvilket gør at han/hun står som online indtil der en skønne dag bliver trykket logout..

Hvordan løser jeg lige dette problem?




9 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Dit problem med sessions kan du ikke køre andet ved end at sætte timeout osv.

Det jeg måske ville gøre hvis jeg var dig var at lave din users tabel om så du istedet for det med online laver en ny tabel som du kan kalde log som gemmer aktivitet fra brugere. Her kan du tjekke på alle brugere som har lavet noget inden for de sidste 5 minuter kan du tolke som online f.eks.

Din log kunne så således ud:

id int auto-inc
user_id int (evt foreign key)
view_page varchar (viser hvilken side brugeren var på)
timestamp bigint (unix timestamp)
comment (hvis du har nogle comments til brugerens aktivitet)


En sådan log er os meget god at have i tilfælde af at du vil lave noget statestik ol. senere. Du kan ligeledes inkludere brugerens IP i tilfælde af snyd mm. så du ved hvilken IP der er blevet brugt til det så du kan banne den osv.



Så vidt jeg ved, så vil sessionen være åben indtil brugeren lukker browseren. Så browser en person væk fra siden uden at trykke logud, vil personen stadig være logget ud. Men lukker personen browseren og kommer ind på siden igen, burde personen ikke være logget ind (med mindre der bliver brugt cookies).

Det ændrer dog ikke på at brugeren ikke vil blive sat som logget ud i databasen. Det kan du gøre nogle ting for.

Du kan lave et cronjob der kører en gang i mellem der tjekker hvornår en bruger sidst var aktiv på siden. Hvis det er mere end 10 minutter siden fx så skal personen sættes som offline.

Ellers kan du når brugeren enten lukker vinduet eller navigere væk fra siden, kan du med javascript logge personen ud. Du kan godt med javascript tjekke om en bruger er ved at forlade siden, og så kan du fx føre et AJAX-request afsted til en side som så opdaterer brugeren i databasen.



Lad mig høre om dette virker.

Fold kodeboks ind/udPHP kode 





Jeg har aldrig brugt cronjobs, så jeg ved ikke en pind om dem..

Men jeg havde en idé om, at man bare kunne sætte sessionernes levetid ned, så de dør efter fx 2 minutter, hvis brugeren ikke er aktiv?



Ja du kan godt sætte Timeout på en session, hvis du vælger at sætte den relativt lavt for at din "users" tabel er bedst muligt opdateret, skal du huske evt asynkront at opdatere den, ex bare ved at requeste en tom php fil.

Hvis du sætter den til 2 minutter, og en bruger er ved at skrive noget indhold, læse en længere side osv, vil han være logget ud relativt hurtigt. Så opdater den løbende.


http://www.google.dk/search?hl=da&q=php+set+session+timeout+&meta=



hvis du vælger at sætte den relativt lavt for at din "users" tabel er bedst muligt opdateret, skal du huske evt asynkront at opdatere den, ex bare ved at requeste en tom php fil.


Dette er jeg ikke helt med på.
Er det sessionen eller databasen jeg skal sørge for at opdatere engang imellem?



Måske skulle jeg læse Kaspers artikel om hans online-system igen, det minder vist meget om det du foreslår, Frank, så vidt jeg husker. :)



Lad mig høre om dette virker.

Fold kodeboks ind/udPHP kode 



Han er ikke ude efter at få nulstillet hans session. Hvis en bruger skifter side uden at logge ud vil hans session forblive aktiv.

Det han skal er at logge brugerens aktivitet for at kunne afgøre om en bruger er aktiv aka. online.



Nu virker det sørme!

Fik lige bikset et meget simpelt bruger-aktivitetssystem sammen udfra Kasper (TSW)'s artikel.

Frank Jensen får flest point for at lede mig ind på det rigtige, men tak til jer andre også. :)



t