Laravel会话始终更改Laravel 5.4中的每个刷新/请求
所以这个标题基本上说明了一切,我使用的是Laravel5.4,PHP7.1,在我的本地机器上,会话工作得很好。基本上,每次尝试登录或重新加载页面时,我都会得到一个新的CSRF令牌,这会破坏一切。我使用数据库作为会话驱动程序,它会在我发出的每个请求中创建一个新的DB条目。这发生在我第一次升级本地计算机时,但要解决它,解决方案是更新我的cookie\u domain env变量,我让它工作。然而,在我的新服务器上,我尝试了我能想到的每一个域,但它仍然不起作用 这是我所知道的Laravel会话始终更改Laravel 5.4中的每个刷新/请求,laravel,session,cookies,laravel-5,session-cookies,Laravel,Session,Cookies,Laravel 5,Session Cookies,所以这个标题基本上说明了一切,我使用的是Laravel5.4,PHP7.1,在我的本地机器上,会话工作得很好。基本上,每次尝试登录或重新加载页面时,我都会得到一个新的CSRF令牌,这会破坏一切。我使用数据库作为会话驱动程序,它会在我发出的每个请求中创建一个新的DB条目。这发生在我第一次升级本地计算机时,但要解决它,解决方案是更新我的cookie\u domain env变量,我让它工作。然而,在我的新服务器上,我尝试了我能想到的每一个域,但它仍然不起作用 这是我所知道的 会话cookie没有保
- 会话cookie没有保存在Chrome->Application->Cookies下,这确实显示在我的本地设置中
- CSRF-TOKEN在每次重新加载页面时都会获得一个新值,但XSRF-TOKEN cookie存在并在每次重新加载时保持其值
- 本地服务器和我的新服务器都运行完全相同的git分支,并且都运行Apache2.4、Laravel5.4和PHP7.1,因此我假设这是某种配置问题。本地和服务器都在运行centos 7
- 每个请求都会在数据库中创建一个新会话,get、post和ajax请求都会这样
除此之外,我还发现这可能与我使用的域是一个子域有关,其中主域也运行laravel,如果是这样,我将不得不找出如何以及为什么。我发现解决这个问题的方法有两个部分,不确定为什么会有所不同,因为它是相同的操作系统和设置 步骤1确保正确设置了COOKIE_域,并且没有端口号(在.env中或直接在/config/session.php中,以您使用的为准)
第2步确保/config/sessions.php中的cookie名称('cookie'=>'whatever')中没有下划线。Laravel显然对此有问题。我们也遇到了此错误,这似乎是解决问题的方法: •检查您的
存储/
文件夹是否具有正确的权限
•尝试禁用页面中的所有Javascript(通过导航器或代码内部禁用),并确保'http\u only'=>true,
•尝试使用https和不使用https
•确保会话驱动程序变量不为空
•尝试在'encrypt'=>false、
和'encrypt'=>true、
•尝试更改cookie名称“cookie”=>“laravelsession”,
•尝试将会话域设置为实际域或空
•尝试在'secure'=>env('SESSION\u secure\u COOKIE',false)和'secure'=>env('SESSION\u secure\u COOKIE',true)之间切换
在每一步之后,这个bug似乎都被修复了,但不知何故,cookie仍然没有在导航器中设置,直到我们在开发中也使用https
很抱歉,我无法提供100%的修复,但有完全相同的问题,我想与您分享我的经验。此问题的主要原因是laravel无法在服务器端保存会话数据 使用文件作为会话存储,这可能是一个权限问题,[如果您在centos上,请检查SELINUX],laravel(这意味着apache或nginx或您的进程运行时使用的任何用户)应该对存储会话文件的文件夹[通常是项目根目录/存储文件夹]具有读写权限 发生这种情况的另一个原因是,当您使用数据库作为会话存储并手动创建会话表时,犯了将id列设置为bigint(20)类型或任何其他不匹配列的错误 这再次意味着laravel无法存储会话数据。 在这里查看我的详细答案
最后一点是关于上面提到的cookie和域设置。希望这有助于为将来解决此问题的任何人指出问题。禁用
nginx
缓存(如果您使用它)。对我来说,它解决了相同的问题。我在Laravel 5.6中也遇到了类似的问题。我的应用程序正在运行,并且从来没有关于身份验证的问题。突然我收到一个“419 |页面过期”
错误,每次刷新都会生成CSRF令牌
最后,我发现浏览器已经阻止了应用程序设置的cookies。我仍然没有找到一个永久的修复方法,但是允许或删除那些被阻止的cookies暂时解决了这个问题
我的