编写一个小型 CMS。用户身份验证是通过在命名会话中使用 php 设置的会话变量进行的。调用注销时,ajax 例程会加载一个单独的 php 脚本来完成这项工作。这个单独的脚本使用相同的会话参数。会话变量被随机数据单独覆盖,然后会话被销毁。这行得通。注销后检查浏览器 cookie 列表显示会话 cookie 已被删除。到目前为止,一切正常。
如果用户在登录时导航到同一站点的另一个页面,或者在新的浏览器选项卡中打开第二个页面,则会出现问题。一旦完成,注销例程就不能破坏或取消设置会话。更糟糕的是,即使密码会话变量在注销时是随机的,重新加载页面也会将其恢复为之前的值,从而有效地让用户重新登录。
检查浏览器数据显示会话 cookie 在发出 session_destroy() 时未能删除,我无法以编程方式将其删除。
我试图弄清楚为什么打开第二个站点页面(使用相同的会话参数)似乎应该锁定会话,因此它不能从任何一个页面被破坏。php手册没有任何地方建议任何此类行为。
浏览器缓存被认为是可能的罪魁祸首,但似乎不太可能。
一直在为此苦苦挣扎。有任何想法吗?
测试在 Firefox 中完成,版本 6 到最新。