我的在线考试管理系统出现了一个奇怪的问题。
测试表单(test.php)中的一些用户需要很长时间来回答问题并提交表单。
提交表单后,会话已过期,用户必须重新登录
这不是代码问题
我将此值设置在所有页面的顶部
ini_set('session.gc_maxlifetime', 18000);有没有办法每隔10分钟刷新一次会话,而不重新加载测试表单中的页面,以防止会话过期?
请帮帮我
谢谢
发布于 2012-09-26 16:12:36
您可以使用javascript XHR,或者其他人称之为AJAX。
使用ajax,你可以调用一个php脚本,每10分钟刷新一次你的会话。:)
这就是我所能说的“精确”。
javascript
var refreshSn = function ()
{
var time = 600000; // 10 mins
setTimeout(
function ()
{
$.ajax({
url: 'refresh_session.php',
cache: false,
complete: function () {refreshSn();}
});
},
time
);
};
// Call in page
refreshSn()refresh_session.php
<?php
session_start();
// store session data
if (isset($_SESSION['id']))
$_SESSION['id'] = $_SESSION['id']; // or if you have any algo.
?>无论如何,另一种解决方案是只使用这里提供的解决方案来延长测试页面的会话时间
发布于 2014-05-16 05:58:32
您所需要的就是(在$.post中使用jQuery ):
JavaScript函数(将其放入您的onload-或其他函数中)
setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutesrefresh_session.php
<?php
session_start();
if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
$_SESSION['token'] = $_SESSION['token'];
}
?>(我知道这与公认的答案几乎相同,我真的很想对这个问题发表评论,但我还没有足够的声誉。
最大的变化是在JavaScript中,你不需要整个函数,只需要一行。)
额外信息:
尽管我认为只要在php中调用session_start()就足够了,如果我没看错的话(http://nl3.php.net/function.session-start):
PHP回调将检索任何现有的会话数据(以特殊的序列化格式存储),并且将被反序列化,并在read回调将保存的会话数据返回到
会话处理时用于自动填充$_SESSION超级全局。
在测试期间,我只把上面的代码放在我的访问者页面上,而不是放在管理页面上。但我在同一个浏览器(Chrome)中打开了这两个页面,管理页面也保持登录状态,至少登录了一个多小时(不再检查)。但是,如果您只使用session_start()**,而不手动刷新任何-var,我不知道它是否仍然有效。**
无论哪种方式,我都希望确保我需要的session-var确实仍然存在:)
https://stackoverflow.com/questions/12597176
复制相似问题