在php中设置会话生存期

时间:2012-03-22 22:34:41

标签: php html session variables

如何设置php会话变量在让我们说小时之后被销毁?我正在寻找网络,但我发现了非常不同的意见,而且他们没有多少帮助。谢谢你......

就像让我说我有两个变量

$_SESSION["loged"];
$_SESSION["user"];

我希望他们在浏览器关闭2个小时后仍然在那里。

3 个答案:

答案 0 :(得分:0)

您可以设置一个会话变量来保存会话的创建时间:

在此示例中,会话在10秒后销毁:

<?php
session_start();

if (!$_SESSION['created_at']) {
    $_SESSION['created_at']=time();
}

$age=time()-$_SESSION['created_at'];

if ($age>10) {
    session_destroy();
}

echo $age;
?>

答案 1 :(得分:0)

如果要控制特定会话变量的生命周期,则需要进行自己的超时检查。最好的方法是在库中添加一个函数,您可以在其中指定特定变量的有效时间。这会将两条信息放入您放入会话中的数组中。然后,在您的常见包含代码中,循环遍历该数组并unset()所有过期的会话变量。确保会话本身可以持续您想要使用的最高值。

PHP会话本身并没有硬终身价值。他们有一个垃圾收集器,会话到期。设置session.gc_maxlifetime是垃圾收集器将删除会话的最大年龄。请注意,此最大年龄是指上次访问时间,而不是创建时间。

但是,还有session.gc_probabilitysession.gc_divisor一起告诉PHP运行垃圾收集器的频率。正常设置意味着每100个会话启动大约1个将运行垃圾收集器。但这意味着如果您的站点数量非常少,则垃圾收集器可能无法运行数小时。这可见的效果是会话似乎超出了session.gc_maxlifetime设置。

答案 2 :(得分:0)

有些用户可能希望使用ini中的设置对其进行修改 即

ini_set('session.gc_maxlifetime') 

但这是错误的做法!您将修改整个PHP部署的配置。这是不切实际和危险的,不应该用于这样的简单情况。更不用说,大多数共享主机方案禁用ini_set,因为更改会影响系统上的每个用户。

相反,这是一些手动处理会话过期的样板代码。

//最初

   session_start();
    $date = new DateTime();
    $ts = $date->getTimestamp();
    if($ts - $_SESSION["timestamp"]) > 60*60) {
    session_destroy();
    //log out!}
    else{
    $_SESSION["timestamp"] = $ts;
    }