gpt4 book ai didi

php - 调整注销功能以处理 Safari 后退按钮问题

转载 作者:技术小花猫 更新时间:2023-10-29 12:43:19 24 4
gpt4 key购买 nike

我有以下 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();
}

最佳答案

在我看来,这是一个浏览器问题,而不是服务器问题。

  1. 您是否尝试过配置缓存 header 以禁止缓存记录的页面?

  2. 作为另一个解决方案,我找到了一个相关的 SO 帖子:Preventing cache on back-button in Safari 5 .

你可以尝试这个解决方案,它基本上是将这个 javascript 放在你的登录页面中:

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

要仅在注销后重新加载页面,您可以检查没有 cookie,这样后退按钮在登录时仍然有效。只需将 "yourCookieName" 字符串更改为您的 session 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
}
};

注意:我认为缓存在解决方案 2 中仍将存在于 Safari 中。因此,在我看来,这并不是一个真正正确处理安全性的解决方案。

关于php - 调整注销功能以处理 Safari 后退按钮问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com