Automatisch Uitloggen
Bij dit fantastische forum gaat dat ook zo.
Hoe ?
Korte levensduur voor de cookies nemen?
Elke page-refresh stel je dat ene uur in.
Is het uur verlopen: redirect naar homepagina waar je uitgelogd bent/wordt.
Wel 5 minuten van te voren een waarschuwing (alert oid) tonen!
Al heb ik persoonlijk echt een schijthekel aan dit soort dingen.
Waarom zou je mij eruit willen knikkeren? Bij een multiplayer-game kan ik me dat voorstellen. Iets anders niet!
Gewijzigd op 14/06/2015 20:11:34 door Eddy E
Sessie lifetime instellen. Zodra die is verstreken is je sessie niet meer geldig.
Eddy gaat er van uit dat Jan de pagina die in de browser open blijft staan dan wil wijzigen. Ik denk dat Paco echter gewoon de session bedoelt omdat hij refereert naar dit forum.
Ozzie begint direct over php.ini instellingen..
@Paco:
Hoe sessies zich gedragen hangt sterk af van instellingen van je webserver en php.ini. Ik heb al van alles meegemaakt op verschillende webservers. Op de ene webserver verloopt een sessie nooit en op de andere om het kwartier of nog sneller.
Hier kun je lezen hoe sessions ongeveer werken maar ook hoe je je eigen session handler kunt schrijven:
http://www.sitepoint.com/writing-custom-session-handlers/
Ik moet dat op mijn gemak is nalezen @Frank, want ik heb het licht nog niet gezien.
Als een webserver een request krijgt dan weten we gewoon niet van wie of welke machine het af komt. De gebruiker is compleet anoniem en we kunnen verschillende gebruikers niet van elkaar onderscheiden. Om dit probleem enigszins te tackelen heeft men cookies uitgevonden. Een cookie kun je zien als een klein bestandje dat informatie bewaart voor één website op het apparaat van de gebruiker. Als de gebruiker een nieuw verzoek stuurt naar de webserver dan wordt de inhoud van het bestandje in de header meegezonden. Je zou dus een cookie kunnen aanmaken met deze inhoud:
De inhoud wordt bij de volgende requests door de browser naar de webserver gestuurd en die kan deze uitlezen en zo bepalen of een gebruiker ingelogd is of niet
MAAR...
Bovenstaand voorbeeld is natuurlijk heel erg makkelijk te hacken. De cookie wordt immers op de pc van de gebruiker bewaart. en als je maar ingelogd=1 meestuurt dan ben je dus ineens ingelogd. We houden daarom liever op de webserver bij wie er is ingelogd en wie niet. Daar zorgen Sessions voor. Sessions maken eenmalig een random id die wordt opgeslagen in een cookie. zo een id is bijvoorbeeld
Nu staat er op het apparaat van de gebruiker dus alleen een cookie met een session ID. Op de server kunnen nu in een bestandje met de naam sess_k623qubavm8acku19somu6ce1k0nb9aj een aantal instellingen opgeslagen worden. Bijvoorbeeld
Met het verschil dat dit nu op de server bewaard wordt en niet op het apparaat van de gebruiker. Als in PHP session_start() wordt uitgevoerd dan zal de inhoud uit het bestand gelezen worden en in de $_SESSION array geplaatst worden.
Hiermee zijn echter nog niet alle problemen opgelost. Het aantal bestanden op de server met allemaal een andere sessie ID kan een enorme omvang bereiken. Daarnaast is het weer minder veilig als een sessie maar eindeloos blijft bestaan. Om deze reden wordt telkens de datum en tijd van het sessie bestand bijgewerkt. Is een bestand te oud, bijvoorbeeld meer dan 30 minuten dan wordt deze ongeldig en op een gegeven moment ook verwijderd. Of een sessie verloopt en hoe snel is afhankelijk van de instellingen op de server.
Zo ja, gebruiker uitloggen en door sturen naar de inlog pagina
Zo nee, niks doen
Bij mijn login:
Op elke pagina:
Code (php)
In LOGOUT.php --> sessie destroy
Toevoeging op 16/06/2015 14:15:47:
Maar wat ik eigenlijk wil, is dat als ik een uur niks heb gedaan, ik automatisch al ben uitgelogd of desnoods een andere actie wil laten uitvoeren. Maar dat is een instelling van de server schat ik zo in. Crontab ?
Gewijzigd op 16/06/2015 14:18:58 door Paco de Wulp
Code (php)
1
2
3
4
5
2
3
4
5
<?php
session_cache_expire(60); // In minuten
ini_set('session.gc_maxlifetime', 3600); // In seconden
session_start(); // Daarna pas de sessie starten/hervatten
?>
session_cache_expire(60); // In minuten
ini_set('session.gc_maxlifetime', 3600); // In seconden
session_start(); // Daarna pas de sessie starten/hervatten
?>
Gewijzigd op 16/06/2015 14:52:12 door Joakim Broden
En hoe doe ik dat dan. Bijvoorbeeld als ik 60 minuten van mijn scherm weg ben, dat ik weer terug kom en automatisch nu voor het inlogscherm weer sta (dus na 60 minuten automatisch LOGOUT.php heb gestart) ?
Waars. een javascript timer die na een uur inactiviteit de logout pagina aanroept of iets dergelijks.
Dat doet PHP niet, als jij je pagina gewoon open hebt zal PHP je niet automatisch uitloggen. Dit zal wss gebeurd zijn zoals Ozzie zei met een Javascript timer, met eventueel Ajax ofzo.
Code (php)
1
2
2
<!-- redirect na een half uur -->
setTimeout(function(){window.location="logout.php"},30 * 60000);</script>
setTimeout(function(){window.location="logout.php"},30 * 60000);</script>
Gewijzigd op 16/06/2015 18:10:40 door Frank Nietbelangrijk
Dank jullie wel. Ik zie de zon weer tussen de wolken opkomen...
En meestal is het verlopen van een sessie juist onwenselijk, dus ik snap absoluut niet dat dit iets is wat je zou moeten nastreven...
Wat Eddy E zegt, tis gewoon verrekte gebruiksonvriendelijk en onhandig.
Tenzij je dit specifiek voor een bepaalde applictie nodig hebt? Bijvoorbeeld voor een toets met een tijdslimiet. Je vertelt er niet echt bij hoe je het wilt toepassen en ook niet waarom. Ik denk namelijk dat je de verkeerde kant op aan het rennen bent. Normaliter is het "automatisch" verlopen (verlopen gebeurt vanzelf) iets onwenselijks, lijkt mij.
Gewijzigd op 16/06/2015 20:03:41 door Thomas van den Heuvel
Toch kan ik me wel indenken dat voor sommige informatie het wel fijn kan zijn als de inhoud na bepaalde inactiviteit niet meer zichtbaar is. (Zoals mijn bankzaken bijv.)
Payment Card Industry (PCI) Data Security Standard (DSS) v3.0 [PDF]:
8.1.8 If a session has been idle for
more than 15 minutes, require the user
to re-authenticate to re-activate the
terminal or session.
8.1.8 If a session has been idle for
more than 15 minutes, require the user
to re-authenticate to re-activate the
terminal or session.
Jouw quote heeft betrekking op de tijdsduur, maar wordt er eveneens gesproken over automatisch uitloggen?
Ozzie PHP op 17/06/2015 11:55:04:
@Ward
Jouw quote heeft betrekking op de tijdsduur, maar wordt er eveneens gesproken over automatisch uitloggen?
Jouw quote heeft betrekking op de tijdsduur, maar wordt er eveneens gesproken over automatisch uitloggen?
Als de sessie is afgelopen, moet je toch opnieuw inloggen?
niet ingelogd = uitgelogd