为什么当我运行两个ajax调用时,laravel在一段时间后自动注销用户


why laravel automatically logout user after some time when I run two ajax calls

我有两个页面来测试实时通信:"client1"answers"client2"。两个页面每隔500毫秒运行相同代码的不同ajax调用(动作)。

    <script type="text/javascript">
        var urlBase = "<?php echo Request::root(); ?>"
        $(function(){
              function requestData1() {
                $.ajax({
                    url: urlBase + '/session/ajaxData1',
                    success: function(point) {
                        setTimeout(requestData1, 500);    
                    },
                    cache: false
                });
              }
              requestData1();
        });
    </script>

在我的控制器中,我只是将数据传递给redis。

public function ajaxData1()
{
    header("Content-type: text/json");
    $x = time() * 1000;
    $y = rand(0, 100);
    $ret = array($x, $y);
    $redis = LRedis::connection();
    $arrayJson = array();
    array_push($arrayJson, array('"user"' => 'user2') + array('"data"' => $ret));
    $redis->publish('message1', json_encode($arrayJson));
}

一段时间后,Laravel自动注销我。如果我将setTimeout设置为2000,一切都会正常工作。为什么会发生这种情况?当我从真正的来源(设备)获得数据时,它会是一样的吗?

解决这个问题的方法是使用数据库会话存储。

http://laravel.com/docs/4.2/session的数据库会话

从那以后,我没有遇到过一次强制登出,尽管之后我没有花任何时间进一步调查原始问题。人生苦短。

有时会发生csrf token。您必须使用post方法传递CSRF令牌。

请参阅示例以解决令牌相关问题。

            ajax: {
                url: '{{url("registration/get-list")}}',
                method: 'POST',
                headers: {
                    'X-CSRF-TOKEN': '{{ csrf_token() }}'
                }
            },