【问题标题】:set up session lifetime in php在 php 中设置会话生命周期
【发布时间】:2012-04-07 13:29:29
【问题描述】:

如何设置 php 会话变量在我们说一小时后被销毁?我在网上搜索,但我发现了非常不同的意见,但没有一个有多大帮助。谢谢...

假设我有两个变量

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

我希望它们在浏览器关闭 2 小时后仍然存在。

【问题讨论】:

标签: php html session variables


【解决方案1】:

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

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

<?php
session_start();

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

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

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

echo $age;
?>

【讨论】:

    【解决方案2】:

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

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

    不过,还有session.gc_probability 和session.gc_divisor 一起告诉PHP 多久运行一次垃圾收集器。正常设置意味着每 100 个会话启动中约有 1 个将运行垃圾收集器。但这意味着,如果您的站点容量非常低,垃圾收集器可能会运行好几个小时。这样做的明显效果是会话似乎超出了session.gc_maxlifetime 设置。

    【讨论】:

      【解决方案3】:

      有些用户可能想使用 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;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-09
        • 1970-01-01
        • 2017-11-08
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多