Session nach X Minuten zerstören

Pre7ender

Mitglied
[erledigt] Session nach X Minuten zerstören

hallo forum

ich habe ein kleines script in dem user sich anmelden können, gewisse einträge ändern etc und wieder ausloggen. funktioniert so genau richtig. nur was ich jetzt mit der zeit bemerkt habe, ist dass die session für meinen geschmack zu lange erhalten bleibt.
ich hab mich mit meinem account im büro eingeloggt, vergessen aus zu loggen, browser laufen gelassen und am nächsten tag war ich immer noch eingelogt.
das möchte ich gerne ändern, also bischen googleln und dann bin ich auf session_cache_expire(); gekommen, also wollte ich das mal teste mit einem testscript:

PHP:
       <?php
       session_cache_expire(1);
       
       session_start();
       
       if (isset($_GET['logout']) AND $_GET['logout'] == 1) {
       
           session_start ();
           session_unset ();
           session_destroy ();
           echo "logged out\n<br><a href='test.php'>reload</a>";
       
       } else {
           if (empty($_SESSION['id'])) {
               $_SESSION['id'] = 3;
               echo "new login";    
           }
           echo $_SESSION['id'];
           
           echo "<br><a href='test.php?logout=1'>logout</a>";
       }
       ?>

was ich will: (in diesem beispiel jetzt)
wenn eingelogt, also session var gesetzt ist, diese ausgeben. wenn ich dann 1 minute keine aktivitäten mehr treibe soll die session zerstört werden und neu einloggen.
macht er aber nicht ?!
wie macht man das genau? so dass die session nach einer min selber flöten geht?

vielen dank schon mal für hilfe!
gruss
 
Zuletzt bearbeitet:
Hallo!

Es gibt zwei Möglichkeiten:
1) Du machst eine php Seite (z.B. logout.php) in der folgender Code Steht:
PHP:
// Inhalt der Session löschen
session_unset();
echo "Sie wurden abgemeldet";
Dann baust du in den HTML Header eine Weiterleitung ein
Code:
<metahttp-equiv="refresh"content="60; URL=logout.php">

Nun wird man nach 60 Sekunden auf die Logout Seite weitergeleitet und dann abgemeldet.

Möglichkeit 2)
Du speicherst in der Session nach die aktuelle Zeit. Wenn der User das nächste mal irgendeinen Link öffnet wird verglichen ob die aktuelle Zeit - der Zeit die der User max. nichts machen darf > der letzten Zeit ist.
Wenn nein wird er auch wieder abgemeldet:
PHP:
// User ist schon angemeldet
if (isset($_SESSION["login"]) AND $_SESSION["login"] == true)
{
   // Abfragen ob die Session Variable schon besteht. Wenn nein wird sie erstellt
   if (!isset($_SESSION["LastActivity"]))
	  $_SESSION["LastActivity"] = time();
   else 
	  // Abfragen ob man noch im Zeitrahmen ist 
	  if ($_SESSION["LastActivity"] < (time() - 600)) 
	  { 
		 // Man ist nicht mehr im Zeitrahmen 
		 $_SESSION["login"] = false; 
		 unset($_SESSION["LastActivity"]);
		 echo "Sie wurden abgemeldet"; 
	  }  
	  else 
		 // Man ist es noch 
		 $_SESSION["LastActivity"] = time(); 
}

Müsste aber eigentlich hier im Forum auch schon irgendwo stehen.

Gruß

Christian
 
Gumbo hat gesagt.:
man hat nicht immer zugriff auf die php ini auf einem public webhoster ;)
und dementsprechend ist auch ini_set() disabled

aber das mit dem timestamp in einer session variable werde ich demnächst ausprobieren. ich hatte die selbe idee aber mit einem eintrag in der mysql db. was ich aber nicht machen wollte, da dies ja nicht sehr performance freundlich ist.

aber danke für die hilfe!
 
Zurück