我遇到一个问题,当我在文本编辑器中输入时,我在Ajax更新上次请求时间之后以某种方式丢失了PHP Session。所以基本上的想法是,当我在我的网站上使用文本编辑器时,我想将$_SESSION['LAST_REQUEST']
变量更新为当前时间,并且在网络的核心我正在检查$ _SESSION ['LAST_REQUEST']不超过15分钟。如果是,那么我结束Session。
所以在这里你可以看到我如何查看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();
}
基本上,当我输入几次时一切都还可以,但是当我输入很快的时候很多,那么会话就丢失了..
P.S。 这是javascript代码,我从tinymce编辑器请求更新会话。
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() });
})
}
});
答案 0 :(得分:0)
尝试增加到期时间:
ini_set ( ' session.gc_maxlifetime ', 2 * 60 * 60); // 2 hours
答案 1 :(得分:0)
尝试将session_start();
放在ajax页面的顶部,例如
session_start();
if (isset($_POST['inactive_session']) && !empty($_POST['inactive_session']))
{
// Renew session data
$_SESSION['LAST_REQUEST'] = time();
}
session_start()
必须在每个php页面上单独调用才能参加同一个会话。
答案 2 :(得分:0)
如果PHP会话对您没有帮助,您可以将会话数据以序列化形式保存到该特定呼叫的数据库中,并检查该文件上的会话是否丢失(无论您在哪里检查会话)。这只是解决您问题的方法,但这可以是一个解决方案,因为大型框架的大部分都使用Db来存储其会话值以克服这种情况。希望这会对你有所帮助