【问题标题】:PHP inactivity timeout and session_status()PHP 不活动超时和 session_status()
【发布时间】:2018-01-31 06:35:08
【问题描述】:

我正在尝试做一些保护措施,以防止当 php 页面空闲且会话因不活动而过期时访问数据库。我将其中一些基于 session_status() 并且对此有疑问。

使用 alerts 和 console.log,我发现 php 和 js 代码似乎没问题。当我人为地注入 session_status() 值时,我得到了我期望的结果。

问题似乎是 session_start() 即使在会话超时后也总是返回 2(可用)。

我不应该期望 system_status 在不活动超时后自动更新吗?有没有比 session_status() 更好的方法来检查会话状态?

这里是“onclick”函数,当单击按钮时,该函数会在过期页面上为 system_status() 返回“2”:

$("#save-to-database").click(function () {

    var active = <?php echo session_status(); ?>;

    if(active == 2) {  //the session is active, do the sort & save

       saveStuff();

    } else {  // the login has expired, abandon this and reload index.php

        window.location.replace("index.php?artist=" + <?php echo $artist ?>);

    }
});

【问题讨论】:

  • 如果看不到您的任何代码,我们将无法帮助您...
  • session_status 在这里没有帮助。如果会话由于不活动(过期)而超时并且用户重新加载页面并调用session_start(),它将开始一个新的、全新的会话,然后调用 session_status() 将告诉您它是活动的。活动和“登录”无关。
  • session_status() 用于检查会话是否被禁用、启用但不存在或处于活动状态。 session_start() 用于创建恢复现有会话。所以是的,它应该总是返回 2
  • 我几乎会把它标记为重复给你:stackoverflow.com/questions/8311320/… 你可以从这个问题的答案中学到很多东西包括如何正确处理会话超时.
  • @drew010 - 是的,我知道当您调用页面时 session_start 将使其可用。我正在尝试(并且失败)的测试用例是让页面空闲直到会话到期,然后单击一个按钮。 onclick 函数在没有页面加载的情况下检查 session_status,并且会话状态仍然报告活动。一会我会在上面的问题中添加onclick函数代码。

标签: php session-state session-timeout


【解决方案1】:

这是一个很长的路要走,但这很好用。

function isSessionActive() {
    session_start();
    $lastActivity=$_SESSION['lastActivity'];
    if ($lastActivity!=null && ($lastActivity+(10*60) > time())) {
        $_SESSION['lastActivity']=time();
        return true;    
    } else {
        deleteSession();
        return false;
    }
}

function deleteSession() {
    session_start();
    setcookie("PHPSESSID", "", time() - 3600, '/');
    session_unset();
    session_destroy();
}

【讨论】:

  • 是的,同意这很好。我有一个几乎与此相同的工作解决方案,但我对可以处理它的单行 PHP 调用的想法感到兴奋。我将回到使用自我管理的计时器而不是 php 会话调用。感谢您的确认。
猜你喜欢
  • 2012-08-09
  • 2012-08-10
  • 1970-01-01
  • 2020-05-21
  • 2017-02-27
  • 1970-01-01
  • 2021-08-05
相关资源
最近更新 更多