【问题标题】:Cannot clear cookies in IE8/9 but works with Firefox and Chrome无法清除 IE8/9 中的 cookie,但适用于 Firefox 和 Chrome
【发布时间】:2012-11-23 05:42:18
【问题描述】:

我有以下代码来检查会话是否存在以及是否未创建。

     session_start(); 
     $loginExists='';
     $show=1;



     if(isset($_SESSION['username'])){
            $loginExists = '<div style="color:#006633; font-family: calibri, Times, serif;  font-size:1.3em; font-weight:bold; margin-left:4%; margin-top:2%;">You  are already logged in!</div>';
            $show = 0;  
        }

     elseif (!isset($_SESSION['username'])){
        if (isset($_COOKIE['username'])){   
            $_SESSION['username'] = $_COOKIE['username'];
            $loginExists = '<div style="color:#006633; font-family: calibri, Times, serif;  font-size:1.3em; font-weight:bold; margin-left:4%; margin-top:2%;">You  are already logged in!</div>';
            $show = 0;}

cookie的设置方式如下:

setcookie('username',$row['username'],time() + 10*24*3600,"/mysite/","");

我的问题是当我在 IE8/9 中清除 cookie 时,它​​无法清除 cookie。我仍然可以导航到我的添加表单。在 Firefox 或 Chrome 中没有问题。

我正在尝试通过转到 Internet 选项 > 删除(浏览历史记录)> 检查 Cookie 并删除它来删除 cookie。

atm 很困惑。

编辑:

添加表单(如何检查会话):

if (!isset($_SESSION['username'])){
            if (isset($_COOKIE['username'])){   
                $_SESSION['username'] = $_COOKIE['username'];

            }
        else{   
                $_SESSION['addForm'] = 1;
                header("Location:loginForm.php");   
            }

所以你可以看到 cookie 是否通过浏览器被清除,它应该重定向到登录页面。

【问题讨论】:

  • IE 提示。关闭它。转到控制面板,找到互联网设置并从那里清除 cookie(和文件,如果需要)。然后重新打开IE。请注意,如果您将其保持打开状态并点击刷新,它仍会发送以前的 cookie - 关闭它会解决此问题。
  • @Robbie:你是对的。这是 IE 的怪癖吗?
  • 是的。我添加为完整性。

标签: php internet-explorer


【解决方案1】:

(发布完整答案,基于上面的评论)

IE 提示。关闭它。转到控制面板,找到互联网设置并从那里清除 cookie(和文件,如果需要)。然后重新打开IE。请注意,如果您将其保持打开状态并点击刷新,它仍会发送以前的 cookie - 关闭它会解决此问题。

问:这是 IE 的怪癖吗?

这似乎是 - 我认为 IE 在内部加载了一些缓存的文件和 cookie,并且清除这些文件不会将它们从内存中删除。因此,如果您遇到这种情况,请关闭以从内存中删除,然后清除文件并重新打开。

这也是 Fiddler(调试器)中的一个“陷阱”,如果您从 Fiddler 中点击“无条件重新发送”,它会重新发送上一个查询,包括 cookie,即使这些 cookie 随后被删除。老实说,这是我所期望的,所以我并不是说这是一个错误。请注意,您需要监控正在发送的内容,因为在调试应用程序时它可能并不总是您所期望的。

【讨论】:

    【解决方案2】:

    您是否尝试在设置会话后从 PHP 设置 cookie 的过期时间?

    【讨论】:

    • 抱歉,我不明白到期时间与什么有关?但是我按照上面的代码设置它setcookie('username',$row['username'],time() + 10*24*3600,"/mysite/","");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    相关资源
    最近更新 更多