1

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

     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 是否通过浏览器被清除,它应该重定向到登录页面。

4

2 回答 2

1

(根据上面的评论发布完整的答案)

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

问:这是 IE 的一个怪癖吗?

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

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

于 2012-11-26T00:50:14.043 回答
0

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

于 2012-11-23T06:44:49.577 回答