session_id löschen wenn Browser geschlossen wird

ahhh :)

da geht!!

Ist ja super!! jetzt muss ich nur noch schauen ob es mich auch automatisch rauswierft!
Nach ca. einer halben stunde.

PS: wie kann ich hier noch die zeit ändern? das schnall ich irgendwie nicht so ganz?!
wie sieht es zB. aus wenn ich will das es mich nach schon 5min rauswierf

PHP:
$sql = "UPDATE users
SET UserSession = NULL,
IP = NULL
WHERE
'".(time()-(60*30))."' > lastchange";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
 
'".(time()-(60*30))."' <-Der Teil entscheidet über die Dauer...

Aber in welchem Maß da gerechnet wird ist mir auch nicht ganz schlüssig...
Sollen rechnerisch ja 30min sein... Aber verursacht den TimeOut bei mir nach ca 3min schon...
Ich schau mir das nochmal in meinen Skripten näher an... Sicherlich wird sich bisdahin jemand finden, der uns weiter helfen kann xD
 
Das Ganze über die Zeit zu lösen ist ebenfalls nicht die Lösung:
User geht mal schnell shoppen und Essen. Nach 4 Stunden kommt er wieder und hatte die ganze Zeit den Browser offen.

Die Lösung ist doch ganz Simpel:
- User kriegt Session
- SessionID wird in DB geschrieben und User erhält eine Fake-SessionID
- Fake SessionID wird dem User an jeden Link und Formular (also GET / POST) angehängt
- Solange User die Fake-SessionID mit sich rumführt behält er seine Session...
 
Die Funktion zum kicken muss jeder User beim besuchen/surfen auf der Site automatisch auslösen...
Daher soll der Teil am Anfang jeder Seite stehen...

Das Prozedere isn etwas umständlich gemachter CronJob...
Denn CronJobs kann man ja nicht immer überall auf jedem Server verwenden ^^

[EDIT]

Die Prozedur, die ich verwende ist eine Session-TimeOut Funktion!

@Minimag
Wenn der User länger als die angegebene Zeit nicht aktualisiert und somit die letzte Aktion nicht aktualisiert wird, dann wird der entsprechende User beim nächsten Aufruf der Seite(wer auch immer sie aufrufen mag) herrausgefunden und die Session Daten aus der Db entfernt, sowie die Session zerlegt...
 
Zuletzt bearbeitet:
Hi,

PS: wie kann ich hier noch die zeit ändern? das schnall ich irgendwie nicht so ganz?!
wie sieht es zB. aus wenn ich will das es mich nach schon 5min rauswierf

Auch wenn Gabriel das nicht glauben mag:

PHP:
time() - 60*30

zieht eine halbe Stunde vom aktuellen Timestamp ab. Wenn Du nur 5 Minuten haben willst, wäre 60*5 ein heißer Anwärter.

Wo setzt Du eigentlich lastchange? Und was ist das für ein Datentyp?

LG
 
habe dein script ja per include auf jeder seite!

PHP:
<?php
$con= mysql_connect('----','----','----') or die(mysql_error());
     mysql_select_db('outsk_login',$con) or die(mysql_error());

// Online Status der User aktualisieren
if(isset($_SESSION['UserID']))
{
$sql = "UPDATE users
SET lastchange = '".time()."'
WHERE UserID = '".$_SESSION['UserID']."'";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
}

// User ohne Autologin ausloggen
$sql = "UPDATE users
SET UserSession = NULL,
IP = NULL
WHERE
'".(time()-(60*30))."' > lastchange";
mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

// Kontrollieren, ob ein automatisch ausgeloggter User noch eine 
gültige Session besitzt
if(isset($_SESSION['UserID'])){
$sql = "SELECT UserSession
FROM users 
WHERE UserID = '".$_SESSION['UserID']."'";
$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
$row = mysql_fetch_assoc($result);
if(!$row['UserSession']){
$_SESSION = array();
session_destroy();
}
}
?>
Code:
`lastchange` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 
Zuletzt bearbeitet:
@knuddel
Ich glaub dir das wohl...
Kann es sein, dass der Unterschied zwischen dem geprüften Wert und dem tatsächlichen TimeOut-Interval, durch ne Server einstellung aufkommt?
Ist es also möglich, dass der Server bereits ein automatisches Session-TimeOut benutzt?
 
@knuddel
Ich glaub dir das wohl...
Kann es sein, dass der Unterschied zwischen dem geprüften Wert und dem tatsächlichen TimeOut-Interval, durch ne Server einstellung aufkommt?
Ist es also möglich, dass der Server bereits ein automatisches Session-TimeOut benutzt?

@Gaby
Dann solltest Du Deine Servereinstellung vielleicht einfach mal überprüfen und/oder in der Datenbank mal nachschauen, ob die Daten da immer so drinstehen, wie Du das erwartest.
BTW: Was soll überhaupt dieses Gemisch aus PHP-Sessionhandling und eigener Datenbank?

LG
 
Das hauptsächliche Session-Handling macht der Server per Cookie automatisch...
Zumindest bei mir... Bin ja noch bei funpic ^^

Die Einträge in der DB dienen nur der Überprüfung im Skript...
Vllt kann ich die auch irgendwann nochmal für was anderes gebrauchen xD

Ich überlege noch, wie ich, wenn der Client keine Cookies akzeptiert, das Session-Handling statt per Cookie auf die Übergabe der SID in der URL ändere...
Aber da fehlt mir jede Idee und jeglicher Ansatz ^^

Die Daten in der DB prüfe ich in solchen Fällen eh meistens, da läuft alles glatt... Ich nehm mal die php.ini unter die Lupe...

[EDIT]

phpinfo() sagt folgendes:
Session Support enabled
session.cache_expire 180
session.cookie_lifetime 3600
session.gc_maxlifetime 1200

Das müssten die Daten sein, die besagen, dass der Server die Sessions automatisch handelt...
Sowie die Auto-TimeOut Zeiten...

Oder irre ich?
 
Zuletzt bearbeitet:
Zurück