【问题标题】:Safari Back button not honouring PHP logout sessionSafari 后退按钮不支持 PHP 注销会话
【发布时间】:2011-03-01 16:36:30
【问题描述】:

我有一个 logout.php 页面,它结束了用户的会话并且运行良好,并且执行以下操作:

session_start(); session_unset(); session_destroy();

我刚刚在使用 Safari 进行测试时注意到,当您注销时,您可以单击后退按钮返回到需要身份验证但没有提示的上一个页面。如果不输入导航,您无法离开此页面,但它不应该首先显示上一页。

到目前为止,在我的测试中,这只是 Mac OS X 上的 Safari 的一个问题,还有许多其他关于此的报告,但我找不到解决方案:

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_23702691.html

我希望能够使用 Safari 的后退按钮禁用此行为 - 很惊讶首先会发生这种情况。

谢谢, 史蒂夫

【问题讨论】:

  • hmm 我不认为这是您的应用程序的问题,safari 只是显示缓存数据
  • 在所有其他浏览器上,如果我注销并单击“后退”按钮,我将进入登录页面以输入用户名/密码。在 Safari 上,我注销并单击“后退”按钮,它“记住”上一页(听起来与缓存相关)并且即使会话被破坏也不会进行身份验证,它应该提示我进行身份验证。如果我仅从该页面导航,它会提示我进行身份验证。
  • 因为浏览器缓存了页面..

标签: php session button safari back


【解决方案1】:

确保您所服务的任何需要身份验证的页面都使用合适的缓存控制标头发送。该页面正在从浏览器缓存中显示,通过提供明确禁止缓存的缓存控制,您应该能够停止此操作。

来自http://php.net/manual/en/function.header.php

<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

对于 Safari,有一些关于缓存和卸载事件的讨论,您可以使用它们来避免缓存。总体而言,WebKit 似乎在缓存方面确实存在一些复杂性。

http://webkit.org/blog/427/webkit-page-cache-i-the-basics/

http://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

【讨论】:

  • 您好,感谢您的评论。我以前试过这个没有用。我刚刚再次添加它们,它仍在加载需要身份验证的页面。问题似乎出在基于 webkit 的浏览器上,例如 Mac 版 Safari 和 iPhone。
  • 我添加了几个链接。当您执行“登录、注销、返回”过程时,请尝试使用 Safari/Chrome 开发人员工具检查浏览器检测到的 HTTP 标头(开发人员工具 -> 资源,单击左侧的页面条目)。
  • 非常感谢,我将对此进行调查 - 进一步的搜索使我对 onUnload 事件等得出了相同的结论。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-02-18
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2012-05-12
  • 2011-08-05
  • 2013-06-02
相关资源
最近更新 更多