每当进行 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 AJAX Request Post 错误代码:使用 laravel auth 登录时会话 ID 更改后的 419
仅在 HTTPS 中执行 ajax POST 请求时,Laravel 403 错误(生产)