Zerstören Sie die PHP-session auf Seite verlassen
Brauche ich, um zu zerstören eine Sitzung, wenn der Benutzer verlassen, die von einer bestimmten Seite. Ich benutze session_destroy()
am Ende der Seite ist das aber nicht machbar für mich, denn meine Seite hat Seitenzählung. Meine Seite ist: abc.php?page=1
oder abc.php?page=2
oder abc.php?page=3
.
So, ich muss zerstören einer session, wenn ein Benutzer Blätter von abc.php
Seite. Wie kann ich es tun, ohne einen cookie?
- möglich, Duplikat der Close/die Sitzung zu beenden, wenn der browser oder das tab geschlossen wird
- thx bro.aber eine asp-Lösung.ich bekomme gar nichts von ihm....Wie kann ich am Leben meiner Sitzung, bis ein user besuchen meine Seite abc.php.wenn der Benutzer verlassen abc.php dann einfach zerstören der session.
- Eigentlich die erste Antwort in dem verlinkten thread ist der richtige, und nicht bei allen ASP-spezifisch.
- Korrekt, ja. Aktuelle Lösung weit entfernt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas zu tun, wenn der Benutzer navigiert Weg von der Seite ist der falsche Ansatz, weil Sie nicht wissen, wenn der Benutzer navigiert zu einer ganz anderen Seite (sagen contact.php for the sake of the argument) oder er/Sie wird gehen Sie einfach auf die nächste Seite abc.php und, wie Borealid wies darauf hin, Sie kann es nicht ohne JS. Stattdessen könnte man einfach ein überprüfen und sehen, ob der Benutzer kommt aus abc.php:
Erste, in Ihrem abc.php Datei-legen Sie eine eindeutige variable in den $_SESSION-array fungieren als Zeichen, dass die user auf dieser Seite:
Dann fügen Sie dies auf allen Seiten, vor jeder Ausgabe prüfen, ob der Benutzer kommt abc.php:
Diese Weise zerstören Sie die session (oder Variablen) nur, wenn der Benutzer herkommt abc.php und die aktuelle Seite ist eine andere.
Ich hoffe, ich war in der Lage, klar zu erklären.
unset($_SESSION['varname']);
stattsession_destroy()
wie Karthik hingewiesen.abc.php
zur gleichen Zeit?Auslösen, wenn der Benutzer tatsächlich Blätter der Seite müssen Sie Javascript verwenden, um senden Sie eine asynchrone Anfrage an den server zurück. Es gibt keine Möglichkeit für den server auf Magische Weise das wissen der Benutzer hat "die linke" auf einer Seite.
Sehen http://hideit.siteexperts.com/forums/viewConverse.asp?d_id=20684&Sort=0 .
Ich hatte ein ähnliches Problem, aber mir war auf einer Seite neu laden wollte ich Variablen, die ich ausgedruckt hatte, vernichtet zu werden. Es war für meine Anmeldung für meine web-design-Klasse, ich mache Fehler, feed-back für, wenn Benutzer legen Sie in einen ungültigen Benutzernamen oder Passwort. Ich konnte den Fehler angezeigt aber wenn ich auf Seite aktualisieren Sie Fehler würde nur dort bleiben. Ich fand, dass nur durch setzen der variable auf nothing, nachdem es gedruckt würde es töten. Werfen Sie einen Blick auf das, was ich getan habe:
Ich weiß nicht, ob das hilft, aber es funktionierte für mich.
Vielen Dank auch an alle, die post auf Seiten wie dieser zu helfen, diejenigen von uns, die noch lernen.
Für eine bestimmte Seite, die Sie benötigen, um zu zerstören der session, dann unset der alle session-Variablen
mit
unset($_SESSION['varname']);
Für die ganze Website, die Sie verwenden können
session_destroy();
Ich das problem lösen.Zunächst nehmen Sie die aktuelle url chk dann die Seite, bleiben Sie auf "aktuelle url".wenn eine Seite nicht in die "aktuelle url", dann zerstören Sie die Sitzung.
Aber sollte dieser code verwendet werden, auf anderen Seiten.Da http ein zustandsloses Verfahren, so dass kein Weg zu finden, wenn ein Benutzer die Seite verlassen.
$_SERVER['REQUEST_URI']
weil das ist, wo der name der Datei wäre. Wenn Sie ein einzelnes header.php Datei für alle Seiten (wie es üblich ist), können Sie einfach meine Lösung, statt Sie den code in alle Seiten AUßER abc.php.abc.php
. Ich weiß nicht, was das hat zu tun mit http zustandslos ist. Und hast du immer noch das gleiche problem wie FreekOne Antwort mit session-Daten zerstört werden, auch wenn Sie nicht zu verlassenabc.php
.Kann man nicht sagen, Wann ein Benutzer navigiert Weg von der Seite, es ist einfach nicht möglich, in einer zuverlässigen Art und Weise.
Das beste, was Sie tun können, ist zu nutzen, wie cookies funktionieren. Beim Start einer session, Sie senden einen cookie an den client identifiziert den client auf jedem nachfolgenden Besuch, und daher aktiviert die zugehörige Sitzung. Es ist bis zu den Kunden zu senden diese Identifikation bei späteren besuchen, und es ist bis zu den Kunden zu "vergessen" seine Identifikation.
Können Sie anweisen, den client zu senden nur den cookie für bestimmte Seiten, und Sie können anweisen, ihn zu vergessen, das cookie beim schließen des browser (mit einer Lebensdauer von 0). Dies kann eingestellt werden, mit
session_set_cookie_params
.Andere als das, können Sie einfach ignorieren die session-Parameter auf den Seiten, wo Sie keine Rolle spielen. Sie können löschen Sie die session (oder bestimmte Werte davon) nach einiger Zeit der Inaktivität, wenn Sie übernehmen den client verlassen hat.
Borealid verdient Anerkennung für den Hinweis auf die eleganteste Lösung.
Mehr kludgey Lösung zu halten, ist ein iframe auf der Seite verweist auf ein weiteres "monitor" - Seite für die Aktualisierung alle paar Sekunden. Diese kann getan werden, ohne JavaScript verwenden:
Dieser aktualisiert der monitor-Seite alle 10 Sekunden. Wenn dies geschieht, wird der monitor-Seite kann notieren Sie die Zeit (wobei die zuvor aufgezeichnete Zeit) und session-ID auf dem server irgendwo (DB oder file).
Dann würden Sie haben, um eine cronjob, der überprüft die Datei/DB für alle Sitzungen, die mehr als 10~12 Sekunden alt und löschen Sie Sie manuell. Die session-Daten in der Regel gespeichert in einem Verzeichnis (angegeben durch Ihre PHP-Konfiguration) in eine Datei namens
sess_the-session-ID
. Könntest du eine PHP-Funktion wie folgt: