2009-06-10 12 views
0

ich bin ein Login-System implementieren, ich bin sicher, viele von Ihnen wissen, was es ist, verwende ich Sitzungen, um die ID des Benutzers zu speichern, und überprüfen Sie es, wenn er Greifen Sie auf eine Seite zu, auf der der Benutzer angemeldet sein muss.
Aber mein Problem ist, wenn der Benutzer auf den Logout-Anker klickt, passiert nichts, ich kann immer noch auf die anderen Seiten zugreifen, solange die aktuelle Seite geöffnet ist.
hier ist der Code Gebrauch:
Abmeldung funktioniert nicht in PHP für ein Login-System

<? 
unset($_SESSION["ID"]); 
session_destroy(); 
header('location: ../Home/index.php'); 
?> 

so kann jemand helfen. Danke im Voraus.

Antwort

6

Sie benötigen einen session_start() vor session_destroy() zu tun.

Wenn nicht, hat PHP keine Ahnung welche Sitzung Sie versuchen zu zerstören.

+0

+1 Ich denke, das ist das Problem. – Shoban

+0

Andernfalls erkennt PHP die Sitzungsvariable "ID" nicht. – ryanulit

+0

Danke, das war das Problem, wirklich müde, ich habe das nicht gesehen. Ich habe es jedes Mal getan, wenn ich die Variable brauche, aber wenn ich nein zerstöre. Danke noch einmal. – abdelkarim

2

Aber mein Problem ist, wenn der Benutzer die Abmelde Anker klickt, passiert nichts

Eine Menge Dinge passiert!

  1. Versuchen Sie, mit der vorherige Taste zurück zu gehen und dann auf die Anmeldeseite zugreifen, die Sie in wieder anmelden?

  2. Suchen Sie auf einer Seite wirklich nach einer Sitzung, wenn ein Benutzer versucht, sie anzuzeigen?

  3. Sind Sie sicher, dass Sie KEINE zwischengespeicherte Version Ihrer Seite anzeigen?

  4. Haben Sie überprüft, PHP-Sitzungen Dateien sind gut gelöscht? (Vielleicht die Erlaubnis Probleme können auftritt)

  5. Location-Header-Syntax prüfen, RFC2616 14,30 sagt:

Das Location Antwort-Header-Feld wird verwendet, um den Empfänger zu einem anderen Ort umgeleitet werden als der Request-URI zur Vervollständigung der Anfrage oder Identifikation einer neuen Ressource. Für 201 (Created) -Antworten ist der Standort derjenige der neuen Ressource, die durch die Anforderung erstellt wurde. Für 3xx Antworten, die Position SOLLTE geben Sie die bevorzugte URI des Servers für die automatische Umleitung auf die Ressource. Der Feldwert besteht aus einem einzelnen absoluten URI.

Location  = "Location" ":" absoluteURI 

Versuchen:

var_dump($_SESSION);

Auf jeder Ihrer Seite, um zu sehen, was wirklich passiert.

+0

+1 - Gute Fragen –

1

Es ist wahrscheinlich, müssen Sie auch das Session-Cookie löschen:

unset($_SESSION["ID"]); 
if (isset($_COOKIE[session_name()])) { 
    setcookie(session_name(), '', time()-42000, '/'); 
} 
session_destroy(); 
//... 
0

auf Logout-Seite sollte es sein, wie unten

<?php 
    session_start() 
    unset($_SESSION["ID"]); 
    session_destroy(); 
    header('Location: http://example.com/home'); 
?> 

Und auf anderen Seiten, die Sie ohne Anmeldung einschränken möchten Benutzer. Sie müssen folgenden Code auf jeder Seite schreiben:

<?php 
    session_start() 
    if(!isset($_SESSION["ID"]) || empty($_SESSION["ID"])) { 
     // redirect to login page 
     header('Location: http://example.com/login'); 
    } 
?>