使用后退按钮时IE6缓存cookie值

时间:2011-02-04 03:04:37

标签: php

我们的用户身份验证系统使用Cookie和$ _SESSION变量来确定登录状态。每个页面都测试是否存在user_id $ _SESSION变量和user_auth cookie:

if(!isset($_SESSION['user_id']) || !isset($_COOKIE['user_auth'])){
     // send user through login
}

如果找不到,则发送用户完成登录过程。注销按钮加载以下页面:

<?php 

session_start();
setcookie('user_auth','',time()-360000,'/','domain.com');
session_unset();
session_destroy();

header("location: http://home.domain.com");

?>

在Firefox中,注销然后按后退按钮会通过登录过程将用户返回。但是,在IE6中,这些值将被保留,用户可以再次访问该页面。这些值肯定会被破坏,因为重新加载页面会使用户通过登录过程返回,但我显然更喜欢IE6将用户直接发送回登录,就像Firefox一样。我尝试过使用no-cache和revalidate标头,但无济于事。

(在建议之前,使用Firefox / Safari / Chrome / IE8不是一个可用的选项。)

3 个答案:

答案 0 :(得分:0)

它没有缓存cookie值,而是缓存页面本身。如果您不想这样做,可以使用标题来禁用缓存。

根据您的内容,您可能还希望在注销消息页面上拥有通常的“请清除缓存并关闭窗口”。

答案 1 :(得分:0)

您还可以在if / else集中测试代理类型,并根据浏览器类型对注销执行不同的操作。和IE 6一样,我认为你可以完全取消会话并完全退出()处理:unset($ _ SESSION ['variable']); ..

我相信这也是一个标题控件,你可以在IE6中运行,如 Response.CacheControl =“no-cache” ..不确定这根本不是帮助或回答你的问题,但肯定是控制这种情况的一种方法。祝你好运!

答案 2 :(得分:0)

使用“内容编码:gzip”的内容始终缓存,尽管您使用“缓存控制:无缓存”

http://support.microsoft.com/kb/321722

你也可以尝试禁用gzip。