Ik heb reeds geruime tijd een loginsysteem met sessies voor m'n PHP content management systeem. De session_id wordt via een cookie opgeslagen op de client PC (de sessies zelf worden natuurlijk door PHP sessies afgehandeld).
Tot nu toe gebruikte ik:
session_set_cookie_params(0);
Om de logintijd in te stellen. Anders gezegd, de gebruiker blijft ingelogd tot deze z'n venster sluit of op de logout-link klikt (welke een session destroy doet). Dit werkt allemaal naar behoren voor zover ik kan zien, maar sommige gebruikers vragen of het niet mogelijk is om een optie te voorzien om ingelogd te blijven - ook nadat de browser afgesloten is zodat ze de volgende dag weer kunnen verder werken zonder telkens te moeten inloggen.
Op de login form komt dus een checkbox "Remember me" waarmee de gebruikers kunnen aanduiden of ze ingelogd willen blijven (pakweg een sessie van een maand als voorbeeld), of slechts ingelogd willen blijven zolang de browser open is.
Om een maandje ingelogd te blijven, zelfs wanneer de browser afgesloten is gebruik ik:
session_set_cookie_params(30 * 24 * 60 * 60);
Wat weer naar behoren werkt (ik heb het natuurlijk met een kortere tijd getest
).
Nu wat is het probleem? Die session_set_cookie_params wordt aan elk begin van m'n PHP scripts aangeroepen om de tijd opnieuw een maand in de toekomst te zetten (anders zou de login na een maand ook stoppen zelfs wanneer de gebruiker wel degelijk heel de tijd actief ingelogd was - dat is natuurlijk niet de bedoeling).
Maar hoe kan ik nu aan het begin van het script weten of ik session_set_cookie_params(0) moet nemen of session_set_cookie_params(30 * 24 * 60 * 60)? Hoe kom ik daar de keuze van de gebruiker te weten? Vlak na de login form zou het nog gaan door die variabele via de form door te geven, maar op volgende pagina's gaat dat niet - en zeker niet wanneer de user terug op de site komt na een weekje afwezigheid.
Ik kan de keuze wel in de sessievariabele opslaan, maar dan kan ik deze niet uitlezen. Ik kan pas aan de sessievariabele na session_start is aangeroepen. Mogelijk is de plaats van m'n session_set_cookie_params niet correct (maar het werkt alleszins toch correct), maar ik verkeer in de veronderstelling dat dit voor session_start aangeroepen moet worden.
Dus ik zit met een probleemsituatie. Ik ken de gebruikerskeuze pas na session_start, maar zou het ervoor moeten weten zodat ik de juiste keuze met session_set_cookie_params kan meegeven.
Een idee dat ik had (maar dat vooralsnog niet wil werken) is het gebruik van nog een client side cookie waarin ik die keuze opsla en welke ik uitlees voor de session_set_cookie_params. Maar ik doe of iets mis daarmee, of het werkt gewoonweg niet.
Hopelijk zijn er hier mensen die meer ervaring hebben met het schrijven van loginsystemen die dit probleem vroeger reeds aangepakt hebben en me kunnen helpen hierbij.
Tot nu toe gebruikte ik:
session_set_cookie_params(0);
Om de logintijd in te stellen. Anders gezegd, de gebruiker blijft ingelogd tot deze z'n venster sluit of op de logout-link klikt (welke een session destroy doet). Dit werkt allemaal naar behoren voor zover ik kan zien, maar sommige gebruikers vragen of het niet mogelijk is om een optie te voorzien om ingelogd te blijven - ook nadat de browser afgesloten is zodat ze de volgende dag weer kunnen verder werken zonder telkens te moeten inloggen.
Op de login form komt dus een checkbox "Remember me" waarmee de gebruikers kunnen aanduiden of ze ingelogd willen blijven (pakweg een sessie van een maand als voorbeeld), of slechts ingelogd willen blijven zolang de browser open is.
Om een maandje ingelogd te blijven, zelfs wanneer de browser afgesloten is gebruik ik:
session_set_cookie_params(30 * 24 * 60 * 60);
Wat weer naar behoren werkt (ik heb het natuurlijk met een kortere tijd getest
Nu wat is het probleem? Die session_set_cookie_params wordt aan elk begin van m'n PHP scripts aangeroepen om de tijd opnieuw een maand in de toekomst te zetten (anders zou de login na een maand ook stoppen zelfs wanneer de gebruiker wel degelijk heel de tijd actief ingelogd was - dat is natuurlijk niet de bedoeling).
Maar hoe kan ik nu aan het begin van het script weten of ik session_set_cookie_params(0) moet nemen of session_set_cookie_params(30 * 24 * 60 * 60)? Hoe kom ik daar de keuze van de gebruiker te weten? Vlak na de login form zou het nog gaan door die variabele via de form door te geven, maar op volgende pagina's gaat dat niet - en zeker niet wanneer de user terug op de site komt na een weekje afwezigheid.
Ik kan de keuze wel in de sessievariabele opslaan, maar dan kan ik deze niet uitlezen. Ik kan pas aan de sessievariabele na session_start is aangeroepen. Mogelijk is de plaats van m'n session_set_cookie_params niet correct (maar het werkt alleszins toch correct), maar ik verkeer in de veronderstelling dat dit voor session_start aangeroepen moet worden.
Dus ik zit met een probleemsituatie. Ik ken de gebruikerskeuze pas na session_start, maar zou het ervoor moeten weten zodat ik de juiste keuze met session_set_cookie_params kan meegeven.
Een idee dat ik had (maar dat vooralsnog niet wil werken) is het gebruik van nog een client side cookie waarin ik die keuze opsla en welke ik uitlees voor de session_set_cookie_params. Maar ik doe of iets mis daarmee, of het werkt gewoonweg niet.
Hopelijk zijn er hier mensen die meer ervaring hebben met het schrijven van loginsystemen die dit probleem vroeger reeds aangepakt hebben en me kunnen helpen hierbij.
A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.