Archiv verlassen und diese Seite im Standarddesign anzeigen : Session nach bestimmter Zeit löschen
Hallo,
wie kann ich eine Session nach einer bestimmten Zeit vernichten, sodas sich der User wieder neu anmelden muss.
Es gibt da was mit Timeout aber da komme ich irgendwie nicht weiter.
Vielen dank für Eure Hilfe.
wenn du die Berechtigung hast, dann kannst ja dein Script die Session-Dateien löschen, direkt im Ordner.
Einfacher gehts aber mit session_destroy() :D
jupp, sobald du die id hast, einfach den user kicken.
ja, aber wie mache ich das nach einer bestimmten Zeit, oder zumindest wann er die Seite verlässt oder das Browserfenser schliest?
definiere bestimmte zeit!
ja, aber wie und wo? Sorry, stehe auf den Schlauch!!!
ruhig blut! wenn du mit meiner geschwindigkeit nicht mitzkommst, kein problem...
Und? Wo kann ich jetzt die Zeit definieren? :rolleyes:
definiere bestimmte zeit! du sollst mir definieren, was du damit meinst. das kann ja alles sein!
Also, der User loggt sich ein. Nach einer bestimmten Zeit oder wenn er die Seite verlässt oder er das Browserfenster schliest soll die Session gelöscht werden so das er sich wieder anmelden muss. Login usw. habe ich schon, funtzt auch. Nur wie ich das hinbekomme was ich gerade beschrieben hab, ist mir ein Rätsel. Ich kann nichts in der php.ini oder so ändern, falls du da eine Lösung parat haben solltest.
Nach einer bestimmten Zeit oder wenn er die Seite verlässt oder er das Browserfenster schliest soll die Session gelöscht werden so das er sich wieder anmelden muss
das passiert aber automatisch!!!
24min ist der standardwert.
wenn er das fenster zu macht, ist die session verloren.
wenn er dies nicht mach, könnte er darauf (innerhalb der 24 min) zurückgreifen. danach wird die session irgendwann komplett gelöscht.
was du einfach machen kannst
1) letzte aktion in db speichern und gucken, wie lange seit der letzten aktion vergangen ist
wenn er aber weiter surft, kann er immer wieder zurück surfen, solange das im zeitraum ist, bleibt er eingeloggt. logosch!
Hört sich übrigens nach Brainstorming an. (mittlererweile)
*Verschieb*
Hallo,
habe das Fenster jetzt mal geschlossen es ist aber in der DB noch immer eine Session vorhanden. Also das Automatische funktioniert also icht.
Ich versuche es jetzt mal mit deinem zweiten Vorschlag obwohl ich nicht sicher bin das man das auch anders Lösen kann auch wenn ich nicht weiß wie. :confused:
hmm, anscheinend noch nicht mit sessions beschäfftigt.
dann verrate mir mal, wie du als user wieder an die session drankommen willst.
das löschen übernimmt doch der GC. der kommt aber wann er will.
Also als kleine Hilfe, ich habe das Login Script von mrhappiness aus den Tuts. Wenn ich mich einlogge wird eine SessionID in die DB geschrieben die wenn ich auf ausloggen klicke wieder gelöscht wird. Ich möchte dies aber nach einer bestimmten Zeit machen das er sich ausloggt.
P.S. Wenn ich nerve dann sags mir und das Thema ist vom Tisch. :(
... hatte schon schlimmere... :D
naja, ob die sessionID bei Hppay in der DB stehen bleibt oder nicht, ist imho aber völlig uninteressant! Schließlich kannst du ja nichts mehr damit anfangen.
du benützt also das script von mrhappiness und willst dazu eine function einbauen, dass der Benutzer nach einer bestimmten Zeit, ähm, "ausgeloggt wird"
das ist kein Problem, denn vor dem Problem stand ich auch, und ich habs so gelöst: (ich wende das nun auf das Script von mrhappiness an - bei mir ist der Aufbau etwas anders, aber ich denke, dass es klappen dürfte)
1. erstelle eine neue Spalte in deiner "user"-Tabelle - ich hab sie "actiontime" genannt (setzte sie als standard auf null)
2. mach die sessionshelpers.inc. php auf
und ändere folgende Dinge:
a) bei login()
$sql="UPDATE TABELLENNAME SET UserSession='".session_id()."', actiontime=$zeit WHERE UserId=".$userid;
b) bei logout()
$sql="UPDATE TABELLENNAME SET UserSession=NULL, actiontime=NULL WHERE UserSession='".session_id()."'";
c) setze diese neue Funktion ein:
function time_check()
{
// Eingeloggt?
if (logged_in())
{
//Momentane Zeit (in Sekunden seit dem 01.01.1970)
$zeit = time();
//Nach welcher Zeit soll ausgeloggt werden? (in Sekunden) hier 1 Stunde
$auslogg = 3600;
// Abfrage der Uhrzeit der letzten Aktion
$sql = "SELECT actiontime FROM TABELLENNAME WHERE UserSession='".session_id()."'";
// Abrage seden
$res = mysql_query($sql);
// Ergebnis in Variable speichern
$erg = mysql_result($res, 0, "actiontime");
// Neue Zeit - alte Zeit = Differenz
$grenze = $zeit - $erg;
// Eigentlich Funktion, wenn die letzte Aktion länger als 1 Stunden her war -> ausloggen
if ($grenze > $auslogg) logout();
// Ansonsten die "Aktionszeit" auf den neusten Stand bringen
else
{
$sql = "UPDATE TABELLENNAME SET actiontime=$zeit WHERE UserSession='".session_id()."'";
mysql_query($sql);
}
}
}
d) füge bei der login.php, nach
include 'sessionhelpers.inc.php';
time_check();
ein.
Vergiss net, bei c) time_check() anstatt "TABELLENNAME" den Namen deiner MySQL-Tabelle einzutragen...
Ein DANK(!!!) noch an mrhappiness, ich benütz sein Script in veränderter Form, klappt 1a!
adios ;-)
lightdisc 17-04-2006, 00:58 Es gibt auch was das heisst das heisst javascript!!!
==> "Onunload"
....
onunload ist aber unnötig, weil wenn der User die Seite schließt rennt die session - wie gesagt - ca. 25min weiter, bevor sie gelöscht wird.
Es geht wahrscheinlich darum, ein "Who is online?" zu machen, stimmts?
ihr macht das für meinen geschmack zu kompliziert.
ich speichere einfach den timestamp + ner gewissen Zeit in der Session selbst.
Und auf jeder seite wird dann mittels includierten if-abfrage überprüft ob der timestamp in der session >= dem aktuellen timestamp ist.
wenn er noch größer ist wird er verlängert ansonsten wird die session zerstört.
funktioniert auch einwandfrei :)
|
|