2017-09-01 32 views
0

我去和使用下面的脚本PHP - 会话cookie到期/无效更早接料

session_start(); 
$_SESSION['username'] = $query[0]['username']; 
$_SESSION['email'] = $_POST['email']; 
$_SESSION['image'] = $query[0]['image']; 
$_SESSION['role'] = $query[0]['role']; 
$_SESSION['banned'] = $query[0]['banned']; 
$_SESSION['id'] = $query[0]['id']; 
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
$_SESSION['useragent'] = $_SERVER['HTTP_USER_AGENT']; 
setcookie(session_name(),session_id(),time()+604800,"/"); 
//redirect to homepage since now logged in. 

login现在在主页再次IM和登录,一切正常,因为它应该。 但仅仅几个小时后,isset($ _ SESSION ['username'])将返回false,但过期时间仍然设置为7天,并且cookie仍然存在。

截止日期的小时比我的时区实际时间小时滞后1小时。不确定这是否重要。我将时区服务器端更改为随机时区,cookie过期数据未更改。

htaccess的:

php_value session.cookie_lifetime 604800 
php_value session.gc_maxlifetime 604800 

(这是htaccess的根,与第一个代码块的上方,在根/登录不知道它很重要。)。

+0

您的pc时间是18:52 GMT – craig

+0

@craig正确。 – user8549339

+0

设置时区并重试 - date_default_timezone_set('您的时区'); – craig

回答

0

将您的session_start();session_regenerate_id();移动到脚本的底部。

<?php 
$_SESSION['username'] = $query[0]['username']; 
$_SESSION['email'] = $_POST['email']; 
$_SESSION['image'] = $query[0]['image']; 
$_SESSION['role'] = $query[0]['role']; 
$_SESSION['banned'] = $query[0]['banned']; 
$_SESSION['id'] = $query[0]['id']; 
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
$_SESSION['useragent'] = $_SERVER['HTTP_USER_AGENT']; 
setcookie(session_name(),session_id(),time()+604800,"/"); 
session_start(); 
session_regenerate_id(); 
?> 

这个逻辑背后的原因是你正在设置cookies,一旦它们被设置并准备就绪,你就开始会话。有一个回答here,解释它更好:

  1. Cookie数据发送页面的标题。

  2. 将标头发送到客户端后,您无法设置cookie。

  3. 只要您开始输出任何数据到客户端(即:浏览器),就会发送标题。

+0

你能解释一下这到底是什么吗?至于什么区别? – user8549339

+0

@ user8549339我已更新我的回答 – Samuel

+0

好的,我通常运行s​​ession_start();在我需要抓取的所有页面上输入ex,username或image。我不应该这样做吗?如果我放弃这一点,它实际上并没有显示出来。也不会重新生成ID,基本上删除旧的和抓住一个新的会话cookie等? – user8549339

0

这可能是最糟糕的尝试使用内置session_set_cookie_params,而不是做一个黑客更改cookie的有效期......还要注意的是session_regenerate_id可引起sessions being lost

+0

是啊似乎我不需要session_regenerate_id,我已经删除它,一切工作,因为它应该。不知道我为什么拥有它,不知道这是否解决了问题。 – user8549339