Laravel Session 在 Laravel 5.4 中每次刷新/请求都会发生变化。

8 浏览
0 Comments

Laravel Session 在 Laravel 5.4 中每次刷新/请求都会发生变化。

所以标题基本上已经说了一切,我正在使用Laravel 5.4,PHP 7.1,在我的本地机器上会话正常工作。基本上,每当尝试登录或刷新页面时,我都会得到一个新的CSRF令牌,这会破坏一切。我使用数据库作为我的会话驱动程序,并且它在每个请求中创建一个新的条目。这在我第一次升级时发生在我的本地机器上,但是为了修复它,解决方案是更新我的cookie_domain环境变量,然后它可以工作。然而,在我的新服务器上,我尝试了我能想到的每个域名,但仍然不起作用。

这是我所知道的,

  • 在Chrome -> Application -> Cookies下没有保存会话cookie,但在我的本地设置中确实显示。
  • 每次页面重新加载时,CSRF-TOKEN会得到一个新的值,但XSRF-TOKEN cookie存在并在每次重新加载时保持其值。
  • 本地和我的新服务器都运行相同的git分支,并且都运行apache 2.4,Laravel 5.4和PHP 7.1,所以我认为这是某种配置问题。本地和服务器都运行centos 7
  • 每个请求都会在数据库中创建一个新的会话,这适用于get,post和ajax请求。

我认为这是某个配置问题,但我不知道是什么问题,非常感谢任何帮助。如果有帮助的话,在我的初始页面加载的响应头下查看,sid和laravel会话都出现在'Set-Cookie"命令下,但实际上都没有保存到本地应用程序的cookie存储中。

编辑/更新

所以最初我自己回答了我认为的解决方法,但是这个解决方法不再起作用,我遇到了同样的问题。所以更新我的问题与以前一样,尝试做任何事情都会创建一个新的会话,重新加载和导航几个页面会添加大量会话,因为有ajax请求和其他类似的活动。

我的设置现在是这样的,我有3个服务器,它们都是从克隆的映像中运行,这意味着它们是相同的,但其中一个是一个子域,development.mysite.com,另外两个是用于主站点mysite.com的负载均衡。所以唯一可能的解释是由于我的子域,laravel无法理解我的设置。我已尝试在.env文件中使用COOKIE_DOMAIN的每个可能的组合(development.mysite.com,.mysite.com,mysite.com,.development.mysite.com等),并且我已经添加了几十个选项到我的主机,但都无济于事。有关这可能是什么的任何想法吗?

**编辑/更新#2**

除此之外,我发现这可能与我正在使用的域是一个子域有关,在这个子域中,主域也在运行laravel,如果是这样,我将不得不弄清楚如何以及为什么。

0
0 Comments

Laravel Session always changes every refresh / request in Laravel 5.4

在Laravel中,这个问题出现的主要原因是Laravel无法在服务器端保存会话数据。如果使用文件作为会话存储方式,通常会出现权限问题。在CentOS上,需要检查SELINUX设置。Laravel(也就是Apache或Nginx等进程运行的用户)应该对存储会话文件的文件夹具有读写权限(通常是项目根目录下的storage文件夹)。

另一个可能出现这个问题的原因是,当将数据库作为会话存储方式,并手动创建会话表时,可能会错误地将id列的类型设置为bigint(20)或其他不匹配的类型。这意味着Laravel无法存储会话数据。关于这个问题,可以查看我在这里的详细回答:https://stackoverflow.com/a/45340647/7260022

最后一个问题涉及到cookie和域设置。希望这些内容能够帮助未来遇到这个问题的人找到问题的根源。

0
0 Comments

在Laravel 5.4中,SESSION_DOMAINCOOKIE_DOMAIN的设置可能会导致会话在每次刷新或请求时都发生变化。这种问题的出现可能是由于两个原因造成的。

第一步是确保COOKIE_DOMAIN已正确设置,并且不带端口号(无论是在.env文件中设置还是直接在/config/session.php文件中设置)。

第二步是确保在/config/sessions.php文件中的cookie名称('cookie' => 'whatever')中不包含下划线。据说Laravel在处理此类情况时会出现问题。

对于我来说,问题是在cookie名称中包含了一个点号(.),即使是在本地开发服务器上也会出现这个问题(Laravel 6.2,Ubuntu 19.10)。你的回答指导了我正确的解决方向。

解决方法:

1.确保COOKIE_DOMAINSESSION_DOMAIN的设置正确,不包含端口号。

2.确保/config/sessions.php文件中的cookie名称不包含下划线。

这两个步骤可以解决Laravel 5.4中会话在每次刷新或请求时都发生变化的问题。

0
0 Comments

Laravel Session always changes every refresh / request in Laravel 5.4

在Laravel 5.4中,会出现会话在每次刷新/请求时都会改变的问题。以下是解决此问题的方法:

• 检查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), 和 'secure' => env('SESSION_SECURE_COOKIE', true),之间切换。

每个步骤之后,这个bug似乎都被修复了,但是在开发中,直到我们也使用HTTPS时,cookie有时仍然没有在浏览器中设置。

很抱歉无法提供100%的解决方法,但是由于完全相同的问题,我想与大家分享我的经验。

值得一提的是,这与我的问题完全无关,我的问题与子域有关,任何寻找答案的人可以在这里找到解决方案:github.com/laravel/framework/issues/19109

我爱你。你刚刚救了我一命。

谢谢你,这个方法有效。你节省了我的时间!

0