通过Ajax请求更新后,PHP SESSION丢失

时间:2015-08-25 11:52:43

标签: php ajax session

我遇到一个问题,当我在文本编辑器中输入时,我在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() });
        })
    }   
});

3 个答案:

答案 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来存储其会话值以克服这种情况。希望这会对你有所帮助