我在$ _SESSION数组中有三个变量:“views”,“user_id”和“username”。当用户注销时,将删除“user_id”和“username”。这适用于所有浏览器,并且在Safari中大约有75%的时间。有时,它不是删除变量,而是将值“删除”给变量。这会抛弃我的整个网站,因为它取决于变量是否已定义。
我删除变量的代码是:
unset($_SESSION["user_id"]);
unset($_SESSION["username"]);
$_SESSION = array();
session_destroy();
在Safari中,var_dump($_SESSION)
给出:
...
["user_id"] => string(7) "deleted"
["username"] => string(7) "deleted"
...
为什么Safari会这样做?
答案 0 :(得分:1)
Safari与此问题无关。会话在服务器端进行管理,所有Safari(或任何浏览器)都在使用PHPSESSID
内的cookie。
您的问题归因于session_destroy。 (强调我的)
session_destroy()会销毁与之关联的所有数据 本届会议。 它不会取消设置任何全局变量 与会话相关联,或取消设置会话cookie。 使用 会话变量,必须调用session_start()。
为了完全杀死会话,喜欢将用户注销掉, 会话ID也必须取消设置。如果使用cookie来传播 会话ID(默认行为),然后会话cookie必须是 删除。 setcookie()可以用于此。
您的unset()
电话应该自行完成。你可以将它们结合起来
unset($_SESSION["user_id"], $_SESSION["username"]);
尝试添加session_write_close();
,看看它是否有所作为。
如果失败,请尝试使会话cookie失效
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);