2012-08-03 77 views
0

我有一个奇怪的问题,当我在session中使用setcookie时,虽然我的浏览器是打开的,但一切正常,但是当我关闭它时,我无法通过页面$_SESSION到另一个页面! 在登录页面我有:php session setcookie和unset

$_SESSION['name'] = $_POST['name']; 
$_SESSION['pass'] = $_POST['pass']; 
$life=2592000;//1 month 
setcookie(session_name(),session_id(),time()+$life); 
header("location:administrator/"); 
die(); 

我在每一个页面中使用session_start();在它们之上,我也用于注销此代码:

session_start(); 
unset($_SESSION['name']); 
unset($_SESSION['pass']); 
session_destroy(); 
header("location:../"); 

一个重要的一点是,当我检查浏览器的cookies,在关闭浏览器之前,有两个cookie和它们的内容值彼此完全相同,一个在会话结束时过期,另一个过期一个月后,我喜欢,但后来我关闭浏览器并返回, cookie但具有不同的值!我认为案例问题和会话变量不会通过页面传递。

+0

您意识到在关闭浏览器时会丢失'$ _SESSION',对吗? – Matt 2012-08-03 15:27:37

+0

当我关闭浏览器会话丢失和cookie不工作!但我不能再次登录,因为我无法通过$ _SESSION从检查页面到管理员。注意:当我删除cookie时,登录工作! – Vahid 2012-08-03 15:33:07

+1

这是我的登出页面!我必须销毁它然后重定向! – Vahid 2012-08-03 15:39:17

回答

1

除了由@马特提到的问题(你可能需要一些自定义的机制来恢复或使用cookie reinstantinate会话),请记住,使用与饼干路径mod_rewrite的或实际的目录混乱!为确保cookie在您需要的时间和地点可用,请添加额外参数/PHP setcookie(),$ path参数)

+0

谢谢。我会测试它。 – Vahid 2012-08-03 15:39:48

+0

看起来像它的工作。非常感谢。 – Vahid 2012-08-03 15:48:16

+0

很高兴听到这个消息。但请注意会话文件通常存储在临时目录中,并在几小时后删除(取决于服务器配置)。因此,使用cookie中存储的值(可能是指向db记录的某些指针)采取@Matt建议并重新建立会话, – jderda 2012-08-03 15:50:47