2015-06-13 6 views
12

Ich habe die folgende Funktion logout(), die auf den meisten Browsern funktioniert, aber nicht Safari. Das Problem in Safari ist nach dem Abmelden, wenn der Benutzer die Zurück-Taste drückt, erhalten sie die vorherige Seite aus dem Cache anstelle des Anmeldebildschirms. Gibt es eine Möglichkeit, die Logout-Funktion anzupassen, um damit umzugehen?Anpassung Logout-Funktion zur Behandlung von Safari zurück Schaltfläche Problem

function logout() 
{ 
    // unset any session variables 
    $_SESSION = []; 

    // expire cookie 
    if (!empty($_COOKIE[session_name()])) 
    { 
     // setcookie(session_name(), "", time() - 42000); 
     $params = session_get_cookie_params();    
     setcookie(session_name(), '', time() - 42000, 
       $params["path"], $params["domain"], 
       $params["secure"], $params["httponly"]); 
    } 

    // destroy session 
    session_destroy();   
} 
+0

ich nicht und Warum dies ein Problem ist, können Sie bitte ausführlicher erklären, was das Problem, das Sie lösen wollen, ist:) – mattfryercom

+1

In der Safari, wenn sich jemand abmeldet und vom Terminal weggeht, kann jemand anderes den Zurück-Knopf drücken und sehen, wo der vorherige ist Benutzer war – DCR

+0

Ich verstehe jetzt, ein wenig zu denken:) – mattfryercom

Antwort

1

Es scheint mir, es ist ein Browser-Problem mehr als ein Server-Problem.

  1. Haben Sie versucht, Caching-Header zu konfigurieren, um das Zwischenspeichern protokollierter Seiten zu verhindern?

  2. Als eine andere Lösung fand ich eine SO-Post in Bezug: Preventing cache on back-button in Safari 5.

Man könnte diese Lösung versuchen, die diese Javascript in Ihren angemeldeten Seiten im Grunde setzt:

window.onpageshow = function(event) { 
    if (event.persisted) { 
     window.location.reload() ; 
    } 
}; 

Um nur die Seite nach einer Abmeldung erneut laden Sie sich überprüfen konnten kein Cookie ist, so dass die Rückseite Wenn Sie zum Beispiel angemeldet sind, funktionieren die Schaltflächen weiterhin. Ändern Sie einfach die Zeichenfolge "yourCookieName" in den Sitzungs-Cookie-Namen.

function getCookie(cname) { 
    var name = cname + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0; i<ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1); 
     if (c.indexOf(name) == 0) return c.substring(name.length, c.length); 
    } 
    return null; 
} 

function hasCookie(cname) { 
    return getCookie(cname) !== null; 
} 

window.onpageshow = function(event) { 
    if (event.persisted && !hasCookie("yourCookieName")) { 
     window.location.reload(); // or redirect to login page 
    } 
}; 

Anmerkung: Ich denke, die Cache wird mit Lösung in Safari noch existiert 2. Also, diese Handhabung nicht wirklich eine Lösung ist richtig Sicherheit meiner Meinung nach.

+1

keine der oben genannten funktioniert. noch auf der Suche nach einer Antwort – DCR

1

Verwenden Sie die Funktion in Ihrem Code umleiten wie

function logout() 
{ 
    // unset any session variables 
    $_SESSION = []; 


    // expire cookie 
    if (!empty($_COOKIE[session_name()])) 
    { 
     // setcookie(session_name(), "", time() - 42000); 
     $params = session_get_cookie_params();    
     setcookie(session_name(), '', time() - 42000, 
       $params["path"], $params["domain"], 
       $params["secure"], $params["httponly"]); 
    } 

// to redirect the user to login page 

$return_url = "login.php"; //I'm using login.php you can change it according to your page 

// destroy session 
session_unset(); 
session_destroy(); 

header('Location:'.$return_url); //to redirect to user 
} 

Und auch die Benutzersitzung überprüfen zu verwenden ist vorhanden sind oder nicht von

session_start(); 
if($_SESSION[name]=="") { 
header("location:index.php"); 
} 

Hinweis: Need in allen Seite zu sein, zu authentifizieren der Benutzer Zugriff auf die Seite, wenn nur die Sitzung

+0

Wie beeinflusst es den Caching-Mechanismus von Safari? – Mat

+0

Ich habe den Code aktualisiert ... – Bruce

Verwandte Themen