我有以下代码来检查会话是否存在以及是否创建了会话。
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中清除coookies时,它无法清除cookie。我仍然可以导航到我的添加表单。在Firefox或Chrome中没有问题。
我试图通过转到Internet选项&gt;删除cookie。删除(浏览历史记录)&gt; Checked Coookies并将其删除。
非常困惑atm。
编辑:
添加表单(如何检查会话):
if (!isset($_SESSION['username'])){
if (isset($_COOKIE['username'])){
$_SESSION['username'] = $_COOKIE['username'];
}
else{
$_SESSION['addForm'] = 1;
header("Location:loginForm.php");
}
因此,您可以看到cookie是否通过浏览器清除,它应该重定向到登录页面。
答案 0 :(得分:1)
(根据上述评论发布完整性答案)
IE的提示。关闭它。转到控制面板,找到互联网设置并从那里清除cookie(和文件,如果需要)。然后重新打开IE。请注意,如果您将其保持打开并点击刷新,它仍会发送以前的Cookie - 关闭它会对此进行排序。
问:这是IE的怪癖吗?它似乎是 - 我认为IE内部加载一些缓存的文件和cookie,清除文件不会将它们从内存中删除。因此,如果出现此行为,请关闭以从内存中删除,然后清除文件并重新打开。
它也是Fiddler(调试器)中的“陷阱”,如果你点击Fiddler的“无条件重新发送”,它会重新发送之前的查询,包括cookie,即使cookie随后被删除。说实话,这是我所期待的,所以我不是说这是一个错误。只是注意到你需要监视发送的内容,因为它可能并不总是你在调试应用程序时所期望的。
答案 1 :(得分:0)
您是否尝试在设置会话后设置PHP的Cookie到期时间?