Laravel 5 异步 AJAX 请求导致会话问题

Posted

技术标签:

【中文标题】Laravel 5 异步 AJAX 请求导致会话问题【英文标题】:Laravel 5 Asyncronous AJAX requests cause session problems 【发布时间】:2015-12-25 20:41:30 【问题描述】:

我正在使用 Laravel 5(“laravel/framework”版本是“v5.1.16”,Homestead Ubuntu),会话驱动程序 = 'file'。

我注意到,如果触发了一些异步 AJAX 请求 (jQuery),例如。在自动完成搜索表单字段中,会话变量就消失了。

只有异步 AJAX 请求才会发生这种情况,当异步选项设置为 false 时,此问题不再存在。

此外,当 session driver 设置为 'cookie' 并且 async 设置为 true 时,每个 AJAX 请求都会创建一个新的 cookie,因此 10 个请求将有 10 个 laravel cookie 等。

有什么建议吗?除了不使用异步请求之外,我没有找到任何体面的原因或解决方案。

相关问题,似乎已修复。

https://github.com/laravel/framework/issues/7549

https://github.com/laravel/framework/issues/5416

【问题讨论】:

我遇到了完全相同的问题。我每隔几秒钟就有一次脚本检查新消息。在给定数量的请求之后,会话 id 更改并且所有会话变量都丢失了。不知道为什么,我找不到任何好的答案。你解决了吗? 很遗憾没有,我使用 cookie 而不是 session 来保存一些简单的数据。 这是一个已知问题 - 没有解决方案:github.com/laravel/framework/issues/8172 - 问题是没有人能够提供可复制的情况 - 这似乎是随机的、罕见的并且没有明显的原因。 它们实际上似乎并没有被修复,第一个问题被关闭为“已知限制”,第二个问题被关闭为“这是你的应用程序结构不好”。 【参考方案1】:

为了得到这个问题的答案,正如他的评论中已经解释的“轮班交换”......

这是一个已知问题 - 没有解决方案:github.com/laravel/framework/issues/8172 - 问题是没有人能够提供可复制的情况 - 它似乎是随机的、罕见的并且没有明显的原因。

【讨论】:

【参考方案2】:

我最近遇到了这个问题,问题可能是路由上的web 中间件的双重绑定。你应该检查一下。我没有注意到 RouteServiceProvider 中已经应用了 web。在我的问题路线上删除 'middleware' => 'web' 后,这个问题就完全消失了。

【讨论】:

以上是关于Laravel 5 异步 AJAX 请求导致会话问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 会话 ID 随每个请求而变化

laravel 5中多个异步ajax请求中的CSRF令牌不匹配错误?

ajax 请求是不是会导致更新 asp.net 会话?

在 Laravel 5 中为非 Ajax 路由设置请求(而非响应)标头

Laravel 5 在 AJAX 密集型应用程序中丢失会话和 .env 配置值

使用ajax调用的角度保存变量到laravel会话不起作用