每当进行 AJAX POST 时,Laravel 4 应用程序都会将用户注销

Posted

技术标签:

【中文标题】每当进行 AJAX POST 时,Laravel 4 应用程序都会将用户注销【英文标题】:Laravel 4 app logs user out anytime an AJAX POST is made 【发布时间】:2015-10-20 16:33:36 【问题描述】:

我有一个 Laravel 4 问题的噩梦。

在应用程序中向服务器发送 AJAX POST 时,它会立即记录系统的用户!这太可怕了,似乎无法调试 ti

有人对解决方案有任何想法吗?

以下是一些 AJAX 请求的示例......

$.ajax(
    type: 'post',
    url: '/orders/orderboards/order/add-item-comment',
    data: 'order_item_id=' + order_item_id+'&name='+name+'&body='+body+'&user_id='+user_id,
    success: function(result) 
      if(result.success)
        console.log('SUCCESS AJAX Comment created: ');


        working = false;
        $(result.html).hide().insertBefore('#addCommentContainer').slideDown();
        $('#body').val('');

      else
        console.log('FAILURE AJAX did not save comment:');
      

    
);

我还在我的应用程序的某些字段上使用 jQuery 库 X-Editable,它将字段转换为就地编辑,并且它也处理这些帖子的所有 AJAX 方面。

我可以使用 AJAX 请求加载数据而不会出现问题,只是在创建或更新您已注销的数据时进行 POST。


更新

似乎任何时候向服务器发出 AJAX 请求都会重置 laravel_session cookie 值。我不确定是什么原因造成的。

我过去曾注意到,如果我打开配置调试选项,那么每个请求也会重置此值并将您注销。似乎 AJAX 请求也会使这种行为发生 =(

有解决方案的想法吗?

【问题讨论】:

返回的是 401 吗?完成请求需要多长时间? 响应是否包含任何删除 cookie 标头? 您是否设置了任何可能捕获请求并将用户注销的身份验证过滤器? @JSelser 这是一个 200 成功页面,然后我的下一页请求加载登录屏幕。查看 cookie 似乎 laravel_session clookie 设置了一个新的会话 ID。虽然我不知道是什么原因造成的 @PatrickM 我不确定,但似乎 laravel 会话 ID 正在重置,这是此屏幕截图中实际 AJAX 请求的标头i.imgur.com/tJ4CDNZ.png 它确实显示了set-cookie 部分这可能是你的意思? 【参考方案1】:

这是一个非常奇怪的问题,我仍然不知道它的原因,但是我现在知道原因了......

我的 javascript 应用发出 AJAX 请求来构建模态窗口的内容。在这个生成的 HTML 中,它发出了获取 Gravatar 图像的请求,当该图像不是真实 gravatar 图像的正确 URL 时,它会强制我的用户立即退出我的 Laravel 4 应用程序。

我不知道为什么这会对我的服务器做任何事情。想听听一些推理吗?

【讨论】:

如果您使用file 驱动程序进行会话,则在向同一个应用程序发出多个快速请求时会出现竞争条件。尝试不同的会话驱动程序 - 数据库或 Redis/memcached。

以上是关于每当进行 AJAX POST 时,Laravel 4 应用程序都会将用户注销的主要内容,如果未能解决你的问题,请参考以下文章

当通过Ajax进行POST时,Laravel 5.6 CSRF令牌失败

Laravel 7中的AJAX分页(内部服务器错误)

Laravel AJAX Request Post 错误代码:使用 laravel auth 登录时会话 ID 更改后的 419

仅在 HTTPS 中执行 ajax POST 请求时,Laravel 403 错误(生产)

Laravel Ajax 请求使用 post 方法抛出 MethodNotAllowedException

使用 Laravel 将 jQuery Ajax POST 请求作为 GET 发送