【问题标题】:PHP: return life of current sessionPHP:返回当前会话的生命周期
【发布时间】:2009-03-07 17:59:26
【问题描述】:

我正在寻找一种方法来检查 PHP 会话的生命周期,并返回会话“活动”的秒数。

有没有我遗漏的 PHP 函数?

【问题讨论】:

    标签: php session


    【解决方案1】:

    您可以存储会话初始化的时间并返回该值:

    session_start();
    if (!isset($_SESSION['CREATED'])) {
        $_SESSION['CREATED'] = time();
    }
    

    对于从任意会话中检索该信息:

    function getSessionLifetime($sid)
    {
        $oldSid = session_id();
        if ($oldSid) {
            session_write_close();
        }
        session_id($sid);
        session_start();
        if (!isset($_SESSION['CREATED'])) {
            return false;
        }
        $created = $_SESSION['CREATED'];
        session_write_close();
        if ($oldSid) {
            session_id($oldSid);
            session_start();
        }
        return time() - $created;
    }
    

    【讨论】:

    • 你的代码对我来说很臭,因为你没有返回会话生命周期!您只需返回它的创建时间,但方法的名称是 getSessionLifetime()。您的方法应命名为 getSessionStartTime(),或更改方法以计算实际经过的时间。
    • 另外,不要费心返回 false。如果您要计算会话生命周期,则返回零,因为会话已经存活了零个时间单位。如果您要获取会话开始时间 a 并且会话是新的,那么您将需要返回 time()。
    【解决方案2】:

    我认为有两个选项都不是很好,但是他们在这里。

    1) 如果您有权访问文件系统,则可以检查会话文件上的创建时间戳。

    2) 将创建时间存储在会话中,例如

    session_start();
    if( ! isset($_SESSION['generated'])) {
        $_SESSION['generated'] = time();
    }
    

    【讨论】:

    • 您的示例将覆盖每个请求的值。
    • 你说得对,我只是在展示想法而不是实现。
    【解决方案3】:

    您可以简单地将创建会话的时间戳存储在会话中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2016-11-21
      • 2014-08-03
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多