Laravel Session总是更改Laravel 5.4中的每个刷新/请求

CMO*_*MOS 14 cookies session session-cookies laravel laravel-5

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

这是我所知道的,

  • 会话Cookie未保存在Chrome - >应用程序 - > Cookie下,这确实出现在我的本地设置中.

  • CSRF-TOKEN在每个页面重新加载时获取一个新值,但XSRF-TOKEN cookie存在并在每次重新加载时保持其值.

  • 本地和我的新服务器都运行完全相同的git分支,并且都运行apache 2.4,Laravel 5.4和PHP 7.1,所以这让我觉得它是某种配置问题.本地和服务器都运行centos 7

  • 每个请求都在DB中创建一个新会话,这发生在get,post和ajax请求中.

我认为这是来自某个地方的配置问题,但我不知道,任何帮助将不胜感激.如果它有帮助,查看我的响应Header我的初始页面加载sid和laravel会话都出现在'Set-Cookie'命令下,但实际上都没有保存到本地应用程序cookie存储.

编辑/更新 所以最初我回答了我自己的问题,说出我认为是修复的问题,但是这个修复程序已经不再有效了,而且我在整个地方都遇到了这个问题.因此,更新我的问题与以前一样,尝试做任何事情都会创建一个新会话,重新加载和导航几个页面会因为ajax请求和其他此类活动而增加数十个会话.

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

**编辑/更新#2**除此之外,我发现它可能与我的域名使用是一个子域名,其中主域名也运行laravel,如果是这样,我将不得不弄清楚如何和为什么.

CMO*_*MOS 5

我发现解决方案分为两部分,由于操作系统和设置相同,因此不确定为什么会有所不同。

步骤1确保正确设置了COOKIE_DOMAIN并且没有端口号(在.env中或直接在/config/session.php中,无论使用哪种方式)

步骤2确保/config/sessions.php中的cookie名称('cookie'=>'whatever')中没有下划线。Laravel显然对此有疑问。

  • “COOKIE_DOMAIN”还是“SESSION_DOMAIN”? (2认同)

Mat*_*rre 5

我们也抛出了这个错误,这似乎解决了这个问题:

•检查您的storage/文件夹是否正确

•尝试禁用页面中的所有Javascript(通过导航器或代码内部禁用它)并确保 'http_only' => true,

•尝试使用和不使用https

•确保SESSION_DRIVER变量为非null

•尝试在'encrypt' => false,和之间切换'encrypt' => true,

•尝试更改cookie名称 'cookie' => 'laravelsession',

•尝试将SESSION_DOMAIN设置为您的实际域或null

•尝试在'secure'=> env('SESSION_SECURE_COOKIE',false)和'secure'=> env('SESSION_SECURE_COOKIE',true)之间切换,

在每一步之后,这个错误似乎都得到了解决,但不知何故,在我们使用https进行开发之前,某些时候cookie仍未在导航器中设置.

我很抱歉不能提供100%的修复,但如果有相同的问题,我想与您分享我的经验.