2015-06-13 4 views
12

मेरे पास निम्न लॉगआउट() फ़ंक्शन है जो अधिकांश ब्राउज़रों पर काम करता है लेकिन सफारी नहीं। सफारी में समस्या लॉगआउट के बाद होती है यदि उपयोगकर्ता बैक बटन हिट करता है तो उन्हें लॉगिन स्क्रीन के बजाय कैश से पिछला पृष्ठ मिलता है। क्या इसे संभालने के लिए लॉगआउट फ़ंक्शन को समायोजित करने का कोई तरीका है?सफारी बैक बटन समस्या को संभालने के लिए लॉगआउट फ़ंक्शन समायोजित करें

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

मैं अंडर नहीं करता यह समझें कि यह एक समस्या क्यों है, कृपया आप अधिक विस्तार से बता सकते हैं कि आप जिस समस्या को हल करने की कोशिश कर रहे हैं वह है:) – mattfryercom

+1

सफारी में अगर कोई लॉग आउट करता है और टर्मिनल से दूर चलता है तो कोई भी बैक बटन दबा सकता है और देख सकता है कि पिछला कहां है उपयोगकर्ता – DCR

+0

था अब मैं थोड़ा समझता हूं:) – mattfryercom

उत्तर

1

ऐसा लगता है कि यह एक सर्वर समस्या से अधिक ब्राउज़र समस्या है।

  1. क्या आपने लॉग पृष्ठों के कैशिंग को अस्वीकार करने के लिए कैशिंग हेडर को कॉन्फ़िगर करने का प्रयास किया है?

  2. एक अन्य समाधान के रूप में, मुझे संबंध में एक एसओ पोस्ट मिला: Preventing cache on back-button in Safari 5

आप इस समाधान जो मूल रूप से, आप प्रवेश पन्नों में इस जावास्क्रिप्ट रहा है की कोशिश कर सकते:

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

करने के लिए केवल आप जांच कर सकता है कोई कुकी है एक लॉगआउट के बाद पृष्ठ पुनः लोड, ऐसी है कि वापस उदाहरण के लिए लॉग इन करते समय बटन अभी भी काम करता है। बस अपने सत्र कुकी नाम पर "yourCookieName" स्ट्रिंग को बदलें।

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 
    } 
}; 

नोट: मुझे लगता है कि कैश अभी भी समाधान 2. साथ सफारी में मौजूद होगा तो, यह वास्तव में एक समाधान सही ढंग से मेरी राय में सुरक्षा से निपटने है।

+1

उपर्युक्त कार्यों में से कोई भी नहीं। अभी भी एक उत्तर की तलाश है – DCR

1

उपयोग

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 
} 

की तरह अपने कोड में समारोह अनुप्रेषित और यह भी उपयोगकर्ता सत्र सत्यापित करने के लिए उपयोग करने से

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

नोट मौजूद हैं या नहीं कर रहा है: प्रमाणित करने के लिए सभी पेज में होना चाहिए उपयोगकर्ता पृष्ठ तक पहुंचने के लिए यदि केवल सत्र

+0

यह सफारी के कैशिंग तंत्र को कैसे प्रभावित करता है? – Mat

+0

मैंने कोड अपडेट किया ... – Bruce

संबंधित मुद्दे