Php session.gc_maxlifetime是否指定自上次更改单个会话变量以来的最大生存期?
我正在使用一个基于java的上传结构,我试着在晚上运行它Php session.gc_maxlifetime是否指定自上次更改单个会话变量以来的最大生存期?,php,session,Php,Session,我正在使用一个基于java的上传结构,我试着在晚上运行它 它基本上存储服务器硬盘上的所有内容(/var/www/private/$userId) 确保数据格式正确 然后将其传递到永久存储器(AmazonS3) 步骤1完成后,我运行以下代码: if($_SESSION['userId']) {//Makes sure that data is well-formed} else {echo 'you are not logged in';} 我试着运行了四个小时,结果发现您没有
if($_SESSION['userId'])
{//Makes sure that data is well-formed}
else
{echo 'you are not logged in';}
我试着运行了四个小时,结果发现您没有登录
打印到屏幕上
以下是cgi php.ini文件中的相应指令(我将ubuntu 12.04与apache2一起使用)
除了session.gc\u probability
和session.gc\u maxlifest
之外,大多数指令都是默认指令
我试图解决这个问题,遇到了Jeff的一个非常有用的博客,我从中推断,如果浏览器中的网站出现一段时间的不活动,浏览器可能会导致删除存储在浏览器中的PHPSESSID cookie。他建议
在浏览器中创建一个后台JavaScript进程,该进程向服务器发送常规心跳。每隔5或10分钟重新生成一个具有定时过期的新cookie
所以我决定这么做
function myTimeoutFunction()
{
$.ajax({
url: "heartbeat.php",
success: function() {
}
});
setTimeout(myTimeoutFunction, 15*60*1000);
}
myTimeoutFunction();
heartbeat.php
我要测试一下这个上传,大概需要4个小时。然而,我只是读了下面的内容
通常,您可以说session.gc\u maxlifest指定自上次更改会话数据以来的最大生存期(不是上次调用session\u start时的最大生存期)
如果我有3个会话变量,$\u session['userId']$\u session['firstName']$\u session['lastName']
,我是否需要在heartbeat.php中重置它们的所有值
session_start();
$_SESSION['userId'] = $_SESSION['userId'];
$_SESSION['firstName'] = $_SESSION['firstName'];
$_SESSION['lastName'] = $_SESSION['lastName'];
或者我可以只重置一个值吗
session_start();
$_SESSION['lastHeartbeat'] = time();
使其他三个不会过期?PHP会话作为一个整体保留;$\会话中的任何更改都将更新更改时间,并通过扩展保留整个会话
关于实际问题:PHP不应该在达到最长时间之前关闭GC会话,但这并不意味着PHP总是清除它。默认情况下,会话保存在/tmp(或其他)目录中,一些Linux发行版将具有cron作业,这些作业可能会不时清理文件夹。检查cron或其他东西,它们可能会清除与PHP无关的会话。PHP会话作为一个整体保存;$\会话中的任何更改都将更新更改时间,并通过扩展保留整个会话
关于实际问题:PHP不应该在达到最长时间之前关闭GC会话,但这并不意味着PHP总是清除它。默认情况下,会话保存在/tmp(或其他)目录中,一些Linux发行版将具有cron作业,这些作业可能会不时清理文件夹。检查cron或其他可能独立于PHP清除会话的东西。+1。我要补充的是,避免会话文件被其他进程或其他具有不同gc设置的php脚本擦除的一个好方法是通过设置session.save_path
@rambocoder-将它们保存到一个隐蔽的不可通过web访问的目录中。save_path只会为session.save_path
指令设置一个不同的路径“其他进程”?我如何确定这些进程可能是什么?是的,它会起作用。我不知道如何找到进程-我不是一个系统管理员,但我想你可以设置一些日志,记录哪些进程调用stat()或unlink()gc过程中涉及的其他操作系统级调用。但是,除了清理tmp文件夹的cron作业之外,可能的罪魁祸首是其他php脚本使用不同配置在同一共享webserver上调用会话_start()。从何时开始的最长时间?会话创建或会话_start()的最后一次调用?+1.我要补充一点,避免会话文件被其他进程或其他具有不同gc设置的php脚本擦除的一个好方法是通过设置session将它们保存到一个隐蔽的不可通过web访问的目录中。save_path
@rambocoder-只会为session.save_path
指令设置一个不同的路径来防止这些操作。”其他进程?我如何确定这些进程可能是什么?是的,它会起作用。我不知道如何找到这些进程-我不是一个系统管理员,但我想你可以设置一些日志,记录哪些进程调用stat()或unlink()gc过程中可能涉及的其他操作系统级调用。但是,除了清理tmp文件夹的cron作业之外,可能的罪魁祸首是其他php脚本在同一共享webserver.max上使用不同配置调用会话_start(),从何时开始?会话创建还是会话_start()的最后一次调用?
session_start();
$_SESSION['lastHeartbeat'] = time();