PHP SESSION被Ajax请求更新后丢失


PHP SESSION lost after updating by Ajax requests

我有一个问题,当我在文本编辑器中输入时,我在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来存储他们的会话值来克服这种情况。希望对大家有所帮助