2009-06-17 10 views
0

Mögliche Duplizieren:
Automatically re-direct a user when session Times out or goes idle…PHP Session Expire Redirect

Ich habe eine Login-System und die Sitzung abläuft, aber sie müssen die Seite aktualisieren wieder die Login in Bildschirm angezeigt. Stattdessen geben meine Benutzer Daten ein und klicken auf "Senden", um herauszufinden, dass sie ausgeloggt sind.

Gibt es eine Möglichkeit, die Seite automatisch auf die Anmeldeseite umzuleiten, wenn die Sitzung abgelaufen ist?

Danke!

EDIT :::

die zuvor gestellte Frage Aus der Überprüfung gefunden Here ich für diese Anwendung die akzeptierte Antwort verwendet haben. Danke Ihnen allen für Ihre Vorschläge.

+0

Mögliche Duplikate: http://StackOverflow.com/Questions/1003001/Automatisch-Re-Direkt--User-When-Session-times-Out-Or-Goes-Idle – Gumbo

+0

Sie haben Recht, es ist ein duplizieren, danke. –

+0

Ich kann Ihnen mit einer Lösung helfen, aber zuerst muss ich wissen, ob die Sitzung nach einer Dauer ablaufen muss, oder ist es in Ordnung, sie am Leben zu halten, solange der Benutzer auf der Seite ist oder zumindest aktiv ist. –

Antwort

0

Nun, optimal sind die Daten, die der Benutzer mit Ihrem Formular gesendet hat, werden vorübergehend gespeichert, der Benutzer kann sich erneut anmelden und wird dann auf die Seite weitergeleitet, die bereits mit den alten Daten gefüllt ist. Daten doppelt eingeben zu müssen (oder die Seite selbst nach einiger Zeit umleiten zu lassen, wenn man gerade mitten in etwas ist) ist eher ärgerlich.

Wenn Sie umleiten möchten, ohne die eingegebenen Daten auf der Seite beizubehalten, sollten Sie dem Benutzer zumindest anzeigen, wie viel Zeit er bis zum Ablauf der Seite hat. JavaScript sollte dafür eine gute Option sein.

0

Sie könnten JavaScript verwenden, um regelmäßig zu überprüfen, ob die Sitzung abgelaufen ist, und dann umleiten, wenn dies der Fall ist. Die Implementierung hängt von den Details Ihres Authentifizierungssystems ab, würde aber im Wesentlichen beinhalten, dass die Ablaufzeit der Sitzung an die Seite weitergegeben wird und dann die Ablaufzeit mit der aktuellen Zeit verglichen wird, bis die Sitzung abgelaufen ist.

EDIT: Beispiel

ich prototype.js verwenden, wenn Sie also einen anderen Rahmen (oder nur rohe JS) Sie werden es anpassen müssen.

<input type="hidden" id="expiration" value="<?php echo(time() + SESSION_TTL) ?>" />

<script type="text/javascript"> 
    new PeriodicalExecuter(function(pe) { 
    if(getTime() >= parseInt($('expiration'))) { 
     window.location = "http://session.expired.com" 
    } 
    } 
</script> 

Sollte etwas entlang der Linien von tun, was Sie wollen.

+0

Ich bin sehr neu in Javascript können Sie ein Beispiel vielleicht? –

1

Sie könnten ein meta-refresh Tag, z.B.

<meta http-equiv="refresh" content="600;url=http://example.com/" /> 

Dies ist keine sehr benutzerfreundliche Sitzung Ablauf zu handhaben, insbesondere für die Verwendung Fall, dass Sie markiert haben: nach 10 Minuten umgeleitet werden.

Eine bessere Technik wäre es, die Benutzeraktivität mit Javascript zu verfolgen, indem Sie Ereignisse mit Tastendruck und Mausbewegung aufnehmen. Jede Minute, wenn eine Aktivität stattgefunden hat, feuere einen XMLHttpRequest ab, um die Sitzung am Leben zu erhalten.

Sagen Sie, dass Ihre Sitzungen nach 10 Minuten ablaufen und dieser JS merkt für diese Zeit keine Benutzeraktivität, er kann innerhalb eines Banners auf Ihrer Seite den Benutzer warnen, dass seine Sitzung abgelaufen ist und bietet Möglichkeiten, die Sitzung usw. wieder herzustellen

Auf diese Weise verlieren Personen, die Daten eingeben oder (für welche Form auch immer) ihre Sitzung nicht verlieren, wenn sie sich Zeit nehmen und nicht umgeleitet werden, wenn sie ihren Arbeitsplatz zum Mittagessen verlassen!

+0

Das ist ein bisschen zu kompliziert für das, was ich suche. –

+0

Aber danke :) –

+0

Ich habe es bearbeitet, um die einfachste mögliche Sache einzuschließen, die für Sie arbeiten würde :) –

1

Die PHP-Funktion ini_get kann verwendet werden, um die Lebensdauer der Sitzung zu lesen, wenn die Seite erstellt wird.
JavaScript kann verwendet werden, um die Weiterleitung nach Ablauf der Sitzung auszuführen.

// javascript 
var logout = function() { 
    //redirect code 
}; 
setTimeout(logout, <%= 1000 * (int)ini_get("session.gc_maxlifetime") %>); 
0

Ich auch eine Javascript-Lösung verwenden.Unsere Login-Seite zerstört die Sitzung, daher haben wir einen Timer, der bei jedem Laden der Seite auf Null zurückgesetzt wird. Wenn dieser Timer abläuft, wird auf die Anmeldeseite umgeleitet, die die Sitzung zerstört.