我有一个问题,当我在文本编辑器中输入时,我在Ajax更新最后一次请求时间后,不知何故失去了PHP会话。所以基本上的想法是,当我在我的网站上使用文本编辑器时,我想将$_SESSION['LAST_REQUEST']
变量更新到当前时间,并在网络的核心,我正在检查$_SESSION['LAST_REQUEST']是否超过15分钟。如果是,我就结束治疗。这里你可以看到我是如何选中Session:
if (isset($_SESSION['LAST_REQUEST']) && ((time() - $_SESSION['LAST_REQUEST']) > 60 * 15))
{
$_SESSION['sessionExpired'] = true;
header('Location: sessionExpired.php');
}
这里是ajax页面脚本它更新$_SESSION['LAST_REQUEST']
变量
if (isset($_POST['inactive_session']) && !empty($_POST['inactive_session']))
{
// Renew session data
$_SESSION['LAST_REQUEST'] = time();
}
基本上当我键入几次时一切都很好,但是当我键入快速和多次时,会话就丢失了..
注:这是我从tinymce编辑器请求更新会话的javascript代码。
tinymce.init({
selector: "textarea",
theme: "modern",
browser_spellcheck: true,
resize : "both",
height: 200,
autoresize_min_height: 200,
plugins: [
"hr pagebreak spellchecker wordcount code table paste textcolor"
],
toolbar: "forecolor backcolor",
setup : function(ed) {
ed.on("keyup", function(ed, e) {
// updating session
$.post("setSession.php", { inactive_session: new Date().getTime() });
})
}
});
尝试增加过期时间:
ini_set ( ' session.gc_maxlifetime ', 2 * 60 * 60); // 2 hours
尝试将session_start();
放在ajax页面的顶部,例如
session_start();
if (isset($_POST['inactive_session']) && !empty($_POST['inactive_session']))
{
// Renew session data
$_SESSION['LAST_REQUEST'] = time();
}
session_start()
必须在每个php页面上单独调用以参与同一会话。
如果PHP会话对您没有帮助,那么您可以将会话数据以序列化形式保存到数据库中,并检查该文件上的会话是否丢失(无论您在哪里检查会话)。这只是你的问题的一个变通方法,但这可以是一个解决方案,因为大多数大型框架使用Db来存储他们的会话值来克服这种情况。希望对大家有所帮助