logout timer über Datenbank

dowebit

Grünschnabel
Hallo PHP-Freunde,

ich habe mir übers WE mal ein Login-Script zusammengestellt, was auch ohne Probleme funktioniert. Ich möchte jetzt nur noch eine eutomatische Logout-Funktion einbauen, sodass man als Anwender sich nicht immer ausloggen muss sondern das Fenster ausversehen auch mal schließen kann.
Ich möchte dies aber nicht mit Cookies realisieren sondern alles in einer MySQL-DB abspeichern.
Hier habe ich eine Tabelle users mit folgenden Spalten angelegt:
userid, uname, ukey, usession, login_out_time

Die Spalte login_out_time hat als Datentyp TIMESTAMP und bei jeder Anmeldung wird dieser auch automatisch geupdated.

Wie kann ich es jetzt in meiner Sessionhelper-Datei realisieren, das überprüft wird ob die Session schon 5 Minuten besteht oder nicht.
Nach 5 Minuten (300 Sekunden) soll die Session abgebaut werden und wenn möglich zur Loginseite gewechselt werden.

Ich habe hierzu schon etwas probiert aber bekomme es halt nicht wirklich hin, da muss ich doch bestimmt noch was mit SQL machen bzw. stimmt der Rest überhaupt schon ?
Es funktioniert übrigens alles andere außer halt der autologout nach 5 Minuten.

PHP:
function connect() 
{ 
$con= mysql_connect('localhost','root','') or die(mysql_error()); 
mysql_select_db('meinedb',$con) or die(mysql_error()); 
} 

function check_user($uname, $ukey) 
{ 
$sql="SELECT userid 
FROM users 
WHERE uname=MD5('".$uname."') AND ukey=MD5('".$ukey."') 
LIMIT 1"; 
$result= mysql_query($sql) or die(mysql_error()); 
if ( mysql_num_rows($result)==1) 
{ 
$user=mysql_fetch_assoc($result); 
return $user['userid']; 
} 
else 
return false; 
} 

function login($userid) 
{ 
$sql="UPDATE users 
SET usession='".session_id()."' 
WHERE userid=".$userid; 
mysql_query($sql); 
header("Location:meinedatei.php");
$login_out_time=time();
} 

function logged_in() 
{ 
$sql="SELECT userid 
FROM users 
WHERE usession='".session_id()."' 
LIMIT 1"; 
$result= mysql_query($sql); 
return ( mysql_num_rows($result)==1); 
} 

function logout() 
{ 
$sql="UPDATE users 
SET usession=NULL 
WHERE usession='".session_id()."'"; 
mysql_query($sql); 
} 

function timeout()
{
if ($login_out_time+300 <= time())
 { 
 die(logout());  
 } 
}

connect();


Ich danke euch schon mal für eure Hilfe
 
Wie wäre es damit?
Ist auch als Funktion umzusetzen!
Beispiel:

PHP:
<?php
     session_start();
     if(!isset($_SESSION['start'])) {
        $_SESSION['start'] = 0;
     }
     else{
          $_SESSION['start']++;
         }     
         if($_SESSION['start'] == 0){
            $_SESSION['time'] = time();
         }

      $_SESSION['ende']= $_SESSION['time']+300;

         if($_SESSION['ende'] < time() || time() > $_SESSION['ende']){
            session_destroy();
            header('Location:index.php'); 
         }
?>
 
Zuletzt bearbeitet:
Das geht auch über einen kleinen Trick:
Du speicherst in der Datenbank, wann er sich einloggt.
Dann prüfst du, ob das schon 5 Minuten her war, oder nicht.

Lustig is auch, dass du jemanden so ausloggen kannst :D das macht bestimmt spaß :rolleyes:
 
Hi!
Eine andere Möglichkeit gäbe es auch mittels Sessions!
Du könntest die Login-zeit in einer Session-Variable speichern und diese bei jedem
weiterem Seitenaufruf abrufen und später dann checken!
Ist diese Zeit über 5min. zb., kannst du ihn kicken ect. oder einfach nur machen was du willst. Das bleibt dann dir überlassen ;)
lg Andulus
 
Zurück