Laravel根据每个请求创建一个新会话

时间:2016-04-15 20:14:17

标签: php laravel session

由于某种原因,我无法弄清楚我的Laravel安装已经开始在每个请求上创建一个新的会话文件!这会使会话无用,因此我的用户无法保持登录状态,csrf令牌不匹配等。

我正在使用Laravel 5.2。它在我的本地环境中似乎没有问题,但在实时服务器上却不行

有没有人知道为什么会发生这种情况以及我如何解决它?

提前致谢

8 个答案:

答案 0 :(得分:1)

检查this issue - Laravel 5.2.27中的更改会自动为您注册Web中间件,因此如果您在路由中手动使用它(您必须在5.2中),那么它会中断

答案 1 :(得分:0)

你检查了这个帖子laravel forum

它说要检查文件中的<?php标记之前是否有空行 app / config / app.php,如果有的话删除空行

答案 2 :(得分:0)

我刚遇到这个问题,它是由使用dump()引起的。

这是将输出发送到浏览器(就像php标记之前的空白一样)并导致我的会话中断。

答案 3 :(得分:0)

从5.1升级到laravel 5.4之后我遇到了类似的问题, 我发现我没有正确升级app / Http / Kernel.php。

\Illuminate\Session\Middleware\StartSession::class

protected $middleware数组中声明了两次 并在

protected $middlewareGroups
$middleware数组中删除它后

它开始正常工作

$middleware适用于所有路线 并$middlewareGroups适用于特定群组

答案 4 :(得分:0)

这似乎是PHP + MacOS的古怪之处。在我们的索引文件中<?php之前是空白行。完全荒谬的问题,调试花费了数小时。

答案 5 :(得分:0)

我的问题是我正在生产站点的子域中进行本地测试。

我的本​​地Laravel在dev.example.com(映射到localhost),而prod在example.com。产品Cookie干扰了开发网站。

解决方案:清除干扰的Cookie或将开发人员站点移离子域。

答案 6 :(得分:0)

在本地,一切正常,但在生产服务器上则无效。问题出在主机上的 php.ini 设置中,默认情况下在此设置了参数(变量)“ mbstring.func_overload = 2 ”。我删除了它,然后所有的工作了。此参数适用于许多CMS使用的先前版本(PHP)。 Laravel在授权过程中给出了419错误,仅此而已,并且每次页面更新时都创建了一个新会话。

答案 7 :(得分:0)

正如其他人所提到的,当会话无法启动时会发生很多情况,因为标头已经发送到浏览器(session_start函数需要发送几个HTTP标头)。

可能是由于在任何文件中打开<?php标签之前的空格或换行符。

代替寻找罪魁祸首,可以通过启用PHP的output buffering来轻松解决。 在您的 php.ini 中寻找output_buffering指令并将其更改为

output_buffering=4096

无论如何,这是生产服务器的推荐值,并且可能已经在OP的本地环境中定义了,因此会话可以在此正常工作。