Chrome 在关闭/退出时未清除 SESSION COOKIES
Posted
技术标签:
【中文标题】Chrome 在关闭/退出时未清除 SESSION COOKIES【英文标题】:Chrome not clearing SESSION COOKIES on close/exit 【发布时间】:2014-05-15 20:55:16 【问题描述】:我正在本地主机上开发一个应用程序,使用:
谷歌浏览器 33.0.1750.154 m
XAMPP 版本 1.8.3
我已经使用了一段时间了,今天突然间当我关闭浏览器(所有窗口)时,Chrome 没有清除 session cookies
,即使我重新启动机器后,session cookies
仍然设置为上次会议。
我的页面顶部有这段代码:
<?php
session_start();
if(!isset($_SESSION['userID']))
echo "<script>alert('Username does not exist')</script>";
echo '<script type="text/javascript"> window.location="login.html";</script>';
exit(1);
?>
效果很好,在关闭浏览器后将我重定向到登录页面,直到几个小时前。
注意:
测试了 IE10、IE11 和 FF,它们没有表现出相同的行为,它们按预期清除了 session cookies
。
我也验证了
从我离开的地方继续...
设置未选中。
有人知道这里发生了什么以及如何解决吗?
【问题讨论】:
当您关闭浏览器时,听起来 chrome 并没有清除您的会话 cookie。 浏览器无法“清除”会话变量。他们无法直接访问 $_SESSION。他们可以清除会话 ID cookie,给他们一个全新的空会话,或者您的服务器端代码必须清空 $_SESSION。 @KevinB 这是已知的错误吗?如何强制它清除会话 cookie? 这不是错误,而是浏览器设置。不过,我找不到它,也许在浏览器关闭时更改 cookie 行为的选项现在在 chrome 中消失了? 如果其他浏览器真的清除SESSIONS,那么互联网就有问题了……你打电话给五角大楼、克里姆林宫和联合国安全委员会?不过说真的,Sessions 存在于服务器上。浏览器唯一拥有的是一个 cookie,它告诉服务器使用哪个会话。如果没有找到这样的 cookie,则创建一个新会话,并且客户端将收到一个新的 cookie。如果该 cookie 未被接受或被删除,那么这就是导致该行为的原因。这不是 PHP 的错,也不是 chrome 的错。这听起来像是浏览器设置问题(也许禁用私人浏览?) 【参考方案1】:感谢 KevinB 为我指明了正确的方向。
事实证明这不是我想象的 cookie 设置,我最终将其设置为:
允许设置本地数据(推荐)
我记得
Google NOW
最近安装在我的机器上,并且在我没有打开浏览器时允许它在后台运行,我相信这是导致我的会话 cookie 没有被清除。最终解决此问题的是取消选中:
在 Google Chrome 关闭时继续运行后台应用程序
SYSTEM 部分下的设置。
希望这有助于省去一些麻烦......
【讨论】:
这将是最终用户机器上的问题,对吧?我知道您可以如何亲自修复它,但有什么方法可以修复它,以便在会话结束时删除最终用户的 cookie? @dstepan 这就是问题所在,如果最终用户启用了此设置,他们的会话不会在他们关闭浏览器窗口时结束,因为 Google 会使其在后台运行 @A.O.是的,我明白了。我希望从最终用户的角度来解决这个问题,而不是让他们更改浏览器中的默认设置。我最终只是明确地删除了 cookie。 详细信息:手动杀死后台 Chrome 任务并不能帮助清除 cookie。只有关闭上述选项并退出工作。需要明确的是,在设置中告诉 Chrome 以所有其他方式清除 cookie 不起作用。仅关闭“继续运行后台应用程序”并关闭 Chrome。 有另一个表现相同的扩展:Testim Editor【参考方案2】:“继续运行后台应用程序”选项可能有效,但我们不能期望用户(客户端)使用其 Chrome 网络浏览器执行此操作。 我的解决方案如下: 他们单击“注销”按钮 - 这会将他们带到一个纯 PHP(无 html 代码)的脚本页面:
<?php
session_start();
$_SESSION=array();
$cookie_parameters=session_get_cookie_params();
setcookie(session_name(),'',time() -86400,$cookie_parameters['path'],
$cookie_parameters['domain'],$cookie_parameters['secure'],$cookie_parameters['httponly']);
session_destroy();
header('Location: logout_exit.php');
?>
代码的“标题”部分(立即)将它们带到页面“logout_exit.php”(您可以随意命名您的页面,并且可以使用 .html 扩展名而不是 .php) 这个页面是纯html(没有php!)。现在,如果您在 Chrome 中查找 cookie,您会看到您的 cookie 仍然存在!但是点击下图: Chrome shows cookie deleted, but still there!
魔术是在您的 logout_exit.php 页面(在 html 代码的标题部分)中包含一个元标记:
<meta http-equiv="refresh" content="30">
强制浏览器自动刷新(30 = 30 秒,但选择您想要的任何值)。刷新后,如果您现在查看 Chrome,它会显示“Cookies (0 in use)”,如果您单击该消息,您会发现 cookie 确实已被清除。
【讨论】:
以上是关于Chrome 在关闭/退出时未清除 SESSION COOKIES的主要内容,如果未能解决你的问题,请参考以下文章
关闭会话时未删除移动浏览器(chrome、safari)cookie