Php 通过Ajax调用自动扩展Laravel会话?

Php 通过Ajax调用自动扩展Laravel会话?,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我有一个小的JS脚本在一段时间内运行: <script> function checkAuthState() { $.get('/session/check', function(response) { console.log(response); }); } setInterval(checkAuthState, 10000); </script> 当访问者似乎已离开站点并离开时,会话将

我有一个小的JS脚本在一段时间内运行:

<script>
    function checkAuthState() {
        $.get('/session/check', function(response) {
            console.log(response);
        });
    }

    setInterval(checkAuthState, 10000);
</script>

当访问者似乎已离开站点并离开时,会话将过期。这被假定为“在他们最后一次向现场提出请求后的一段时间”


Ajax请求是一个请求(就服务器而言,与任何其他请求一样),因此cookie会像对任何其他请求一样进行扩展。

会话就是这样工作的。如果要存储一些应该过期的数据,请改用。将数据存储一分钟:

cache(['key' => 'value'], 1);
然后使用它:

public function checkAuthState()
{
    cache('key');
    return response()->json(array('success' => true));
}
更新

如果要确定会话是否已过期,只需存储一些值:

session('key', 'value')
并检查它:

if (session('key'))

老实说,我有点惭愧——我不知道这是怎么回事。这难道不意味着,如果一直有其他后台呼叫,即使用户早已离开,会话也不会过期吗?对于“离开”的值,包括“打开浏览器窗口并指向网站”,是的。我将此答案标记为最佳,因为它清楚地解决了我最初的中心问题:为什么会发生这种情况?不过,还是要感谢Alexey Mezenin的投入和示例。谢谢。这个想法是(或者更确切地说是)每10秒打一次电话,以确保会话不会过期。如果有,我会显示一个弹出窗口并重新加载页面。但是,如果检查会话的调用实际上扩展了会话。。。替代方案是什么?(我只想说我现在买不起web套接字服务器)这很简单。但是如果我想在客户端显示一个弹出窗口,我仍然需要调用服务器来检查
会话('key')
是否存在——这让我回到无意中扩展会话的状态。@lessugar好吧,您在这里没有选择,您需要检查它或使用广播(web套接字)。你也可以,记住时间并在应用程序的前端检查它,但这不是一个健壮的解决方案。是的,我感觉到一个轴心即将到来。再次感谢您的建议和花费的时间。
session('key', 'value')
if (session('key'))