由于某种原因,我无法弄清楚我的Laravel安装已经开始在每个请求上创建一个新的会话文件!这会使会话无用,因此我的用户无法保持登录状态,csrf令牌不匹配等。
我正在使用Laravel 5.2。它在我的本地环境中似乎没有问题,但在实时服务器上却不行
有没有人知道为什么会发生这种情况以及我如何解决它?
提前致谢
答案 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的本地环境中定义了,因此会话可以在此正常工作。