2012-03-27 90 views
0

我有写文章的用户,当他们离开那里的计算机一段时间后回来然后提交一篇文章作者/ user_id被记录为NULL值。我假设会议即将到期。我有:发布cookies /到期会话

ob_start(); 
session_start(); 

if(isset($_SESSION['user_id'])) { 
    $ext = time() + 31560000; 
    setcookie('name', $_SESSION['user_id'], $ext); 
} 

在登录时用户重定向的索引页的顶部。

此外,这是当他们实际登录会发生什么:

$user_id = get_user_id($some_variable); // get's the user_id 
$username = get_username($some_variable); // get's username 

$_SESSION['user_id'] = $user_id; 

?> 
<script type="text/javascript"> 
    window.location = 'http://site.com/<?php echo $username; ?>'; 
</script> 
<?php 
exit(); 

这是正确配置,以及为什么会在用户的会话中到期?他们不退出浏览器,它只是无所事事。这会导致什么?

+1

检查你的'php.ini'设置什么[的session.gc_maxlifetime(http://www.php.net/manual/en/session.configuration。 php#ini.session.gc-maxlifetime)设置为。默认值是1440秒或24分钟。在这段时间之后,会有旧会话数据被清理的可能性。 – drew010 2012-03-27 03:42:15

+0

会议session.gc_maxlifetime = 1000000(随机数)是正确的方式写在php.ini? – Graham 2012-03-27 03:44:41

+0

是的,它会在全球范围内做到这一点。您也可以使用脚本中的[ini_set](http://php.net/ini_set),但如果这样做,则必须确保所有与会话交互的脚本使用相同的值。确保它的大小足够满足你的需求,但不是那么大,最终会在服务器上产生大量的旧会话数据。 – drew010 2012-03-27 03:46:54

回答

1

我不知道你试图实现与

if(isset($_SESSION['user_id'])) { 
    $ext = time() + 31560000; 
    setcookie('name', $_SESSION['user_id'], $ext); 
    } 

什么,但不增加PHP的会话生存期,但只有创建有$ _SESSION [“user_ID的”]作为cookie叫名字值并在创建后到期31560000秒。

如果你想改变你的一生会看到session.configuration

+0

我在看。我想要使​​用什么特定的功能,以及如何编写它?我想将它设置为86400秒。只是把一个数字放在那里。 – Graham 2012-03-27 03:47:54

+0

你可以使用ini_set函数http://www.php.net/manual/en/function.ini-set.php或直接修改你的php.ini。 ex'init_set('session.gc_maxlifetime',86400);' – grifos 2012-03-27 03:49:20