我有以下logout()函数,它适用于大多数浏览器,但不适用于safari.如果用户点击后退按钮,他们从缓存中获取上一页而不是登录屏幕,则Safari浏览器中的问题是退出之后.有没有办法调整退出功能来处理这个?
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(); }
在我看来,这是一个浏览器问题,而不是服务器问题.
>您是否尝试配置缓存头以禁止缓存已记录的页面?
>作为另一个解决方案,我发现了一个SO职位:Preventing cache on back-button in Safari 5.
你可以尝试这个解决方案,它基本上是把这个javascript放在你记录的页面中:
window.onpageshow = function(event) { if (event.persisted) { window.location.reload() ; } };
要仅在注销后重新加载页面,您可以检查是否没有cookie,这样后退按钮在登录时仍然可以工作.只需将“yourCookieName”字符串更改为会话cookie名称即可.
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 } };