所以标题基本上说明了一切,我正在使用Laravel 5. 4,PHP 7.1和我的本地机器会话工作得很好。基本上当我每次尝试登录或重新加载页面时,我都会得到一个新的CSRF令牌,这会破坏一切。我使用数据库作为我的会话驱动程序,它会在我发出的每一个请求中创建一个新条目到DB中。当我第一次升级的时候,这个问题发生在我的本地机器上,但是为了解决这个问题,我更新了我的cookie_domain env变量,我让它工作了。但是在我的新服务器上,我尝试了我能想到的每个域,它仍然不工作。
我知道的是,
- 会话cookie没有保存在Chrome -〉应用程序-〉Cookie下,这确实显示在我的本地设置中。
- CSRF-TOKEN在每次页面重新加载时都会获得一个新值,但XSRF-TOKEN cookie存在并在每次重新加载时保持其值。
- 本地服务器和我的新服务器都运行完全相同的git分支,并且都运行apache 2.4,Laravel 5.4和PHP 7.1,所以我认为这是某种配置问题。
- 每个请求都会在数据库中创建一个新的会话,get、post和 AJAX 请求都是如此。
我想这是某个地方的配置问题,但我不知道,任何帮助都将不胜感激。如果有帮助,请在我的响应头下查找我的初始页面加载,sid和laravel会话都存在于“Set-Cookie”命令下,但实际上都没有保存到本地应用程序cookie存储。
编辑/更新所以最初我回答了我自己的问题,说我认为是修复,但这个修复不再工作,我得到这个问题的所有地方。所以更新我的问题是一样的,试图做任何事情创建一个新的会话,重新加载和导航几个页面添加几十个会话由于 AJAX 请求和其他类似的活动。
我现在的设置是这样的,我有3个服务器所有三个都运行了一个克隆的映像,这意味着他们是相同的,但其中一个是子域,development.mysite.com和其他2个是主站点mysite.com的负载平衡。所以我能想到的唯一可能的解释是,不知何故laravel不能理解我的设置,由于我的子域。我已经尝试了COOKIE_的每一个可能的组合域在.env文件(development.mysite.com,.mysite.com,mysite.com,.development.mysite.com等),我已经添加了几十个选项到我的主机都无济于事。任何想法,这可能是什么?
编辑/更新#2除此之外,我发现这可能与我的域在使用中是一个子域有关,其中主域也运行laravel,如果是这样,我将不得不找出如何和为什么。
5条答案
按热度按时间disbfnqx1#
我们也解决了这个错误,这似乎是解决问题的方法:
·检查您的
storage/
文件夹是否正确·尝试禁用页面中的所有JavaScript(通过导航器或代码内部禁用),并确保
'http_only' => true,
·尝试使用HTTPS和不使用HTTPS
·确保SESSION_DRIVER变量不为空
·尝试在
'encrypt' => false,
和'encrypt' => true,
之间切换·尝试更改cookie名称
'cookie' => 'laravelsession',
·尝试将您的
SESSION_DOMAIN
设置为您的实际域或null·尝试在
'secure' => env('SESSION_SECURE_COOKIE', false), and 'secure' => env('SESSION_SECURE_COOKIE', true),
之间切换在每一步之后,这个bug似乎被修复了,但是不知何故,直到我们在开发中也使用HTTPS,cookie仍然没有在导航器中设置。
我很抱歉不能提供100%的修复,但有完全相同的问题,我想与您分享我的经验。
eit6fx6z2#
我发现解决这个问题的方法是2个部分,不知道为什么它会有所不同,因为它是相同的操作系统和设置。
步骤1确保COOKIE_DOMAIN设置正确,并且没有端口号(可以在.env中,也可以直接在/config/session. php中,无论你使用哪一个)
第2步确保/config/sessions. php文件中的cookie名称('cookie' =〉'whatever')没有下划线,显然Laravel对此有问题.
oxcyiej73#
此问题的主要原因是laravel无法在服务器端保存会话数据。
使用文件作为会话存储,可能会&通常是一个权限问题,[如果你在centos上,请检查SELINUX],laravel(这意味着apache或nginx或任何运行你的进程的用户)应该对存储会话文件的文件夹[通常是项目根/存储文件夹]具有读写权限。
另一个可能发生这种情况的原因是,当您使用数据库作为会话存储器并手动创建会话表时,错误地创建了bigint(20)类型的id列或任何其他不匹配的列。
这也意味着laravel不能存储会话数据。请在这里查看我的详细答案https://stackoverflow.com/a/45340647/7260022
最后一点是上面提到的cookie和域设置。希望这有助于为将来遇到这个问题的人找出问题所在。
zqry0prt4#
我在Laravel 5.6中也遇到了类似的问题。我的应用程序工作正常,从来没有过身份验证方面的问题。突然我遇到了一个
"419 | page is expired"
错误,CSRF令牌在每次刷新时都会生成。最后我发现浏览器屏蔽了应用程序设置的cookie。我仍然没有找到永久的修复方法,但允许或删除那些被屏蔽的cookie暂时解决了这个问题。
我的
config/sessions.php*
配置文件没有任何变化,应用程序在本地服务器上工作正常。w6mmgewl5#
禁用
nginx
缓存,如果你使用它。对我来说,它解决了同样的问题。