Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使PHP会话保持活动状态,直到一小时;“不活动”;过去了_Php_Session_Cookies - Fatal编程技术网

使PHP会话保持活动状态,直到一小时;“不活动”;过去了

使PHP会话保持活动状态,直到一小时;“不活动”;过去了,php,session,cookies,Php,Session,Cookies,我已经阅读了几篇关于这个主题的文章,但仍然没有完全理解客户端会话cookie、服务器端会话文件和PHP在垃圾收集期间“随机”选择删除或保留会话的方式之间的关系 我试图确保的行为是: 用户登录后,会话开始 如果用户在1小时内处于非活动状态*,则会话将被取消 毁坏 *这对我的网站来说是至关重要的,因为用户可能在同一个页面上花费了一个小时,表面上是“空闲”的,但实际上他们并不是空闲的。他们可能正在撰写长篇报告、观看视频等 到目前为止,我使用的是: session_start(); setcooki

我已经阅读了几篇关于这个主题的文章,但仍然没有完全理解客户端会话cookie、服务器端会话文件和PHP在垃圾收集期间“随机”选择删除或保留会话的方式之间的关系

我试图确保的行为是:

  • 用户登录后,会话开始
  • 如果用户在1小时内处于非活动状态*,则会话将被取消 毁坏
*这对我的网站来说是至关重要的,因为用户可能在同一个页面上花费了一个小时,表面上是“空闲”的,但实际上他们并不是空闲的。他们可能正在撰写长篇报告、观看视频等

到目前为止,我使用的是:

session_start();
setcookie(session_name(),session_id(),time()+3600);
此代码在每次页面加载时执行

我还通过setInterval每分钟触发一个AJAX请求,在用户明显处于“空闲”状态的页面上加载包含上述代码的PHP脚本

我的方法能保证我所需要的行为吗?还是我遗漏了什么?也许有一种更干净的方法来确保这种行为


非常感谢。

您可以尝试以下方式:

if (isset($_SESSION['LAST_ACTIVITY'])&&(time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
    // this takes 60 minutes
    session_unset();   
    session_destroy();   // destroy session data that is in storage
}

您可以尝试以下方法:

if (isset($_SESSION['LAST_ACTIVITY'])&&(time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
    // this takes 60 minutes
    session_unset();   
    session_destroy();   // destroy session data that is in storage
}
我。。。仍然不能完全理解客户端会话cookie、服务器端会话文件和PHP“随机”选择在垃圾收集期间删除或保留会话的方式之间的关系

客户端cookie不包含有关用户的任何信息。它只是一个令牌,它与任何其他信息一起随每个新请求发送到服务器。您正在设置的过期限制指示客户端cookie的有效期

服务器端会话文件和垃圾收集是另一回事。在php.ini中,您可以将默认值设置为1440,这表示“数据被视为“垃圾”并可能被清除的秒数”。然后是(默认为
1
)和(默认为
100

这意味着,在
1440
秒之后,有一个
1
/
100
垃圾收集器将启动,清理会话,该会话现在被视为垃圾

如果希望在一小时后以100%的概率删除会话,请将
session.gc\u probability
设置为
0
,然后手动删除旧会话。为此,您可以在数据库中保存“last activity”并cron脚本,该脚本将删除“last activity”和
time()
差异大于1小时的会话

我。。。仍然不能完全理解客户端会话cookie、服务器端会话文件和PHP“随机”选择在垃圾收集期间删除或保留会话的方式之间的关系

客户端cookie不包含有关用户的任何信息。它只是一个令牌,它与任何其他信息一起随每个新请求发送到服务器。您正在设置的过期限制指示客户端cookie的有效期

服务器端会话文件和垃圾收集是另一回事。在php.ini中,您可以将默认值设置为1440,这表示“数据被视为“垃圾”并可能被清除的秒数”。然后是(默认为
1
)和(默认为
100

这意味着,在
1440
秒之后,有一个
1
/
100
垃圾收集器将启动,清理会话,该会话现在被视为垃圾


如果希望在一小时后以100%的概率删除会话,请将
session.gc\u probability
设置为
0
,然后手动删除旧会话。为此,您可以在数据库中保存“last activity”并cron脚本,该脚本将删除具有“last activity”和
time()的会话,少于1小时。

此文件的可能副本对会话垃圾回收有很好的解释:此文件的可能副本对会话垃圾回收有很好的解释: