php - Laravel 7:为什么我的会话 cookie 没有在浏览器中设置?
问题描述
即使服务器响应包含正确的Set-Cookie
标头,我的 Laravel 会话 cookie 也没有在浏览器中设置。Laravel 服务器运行在 localhost:8000,客户端应用程序是 NuxtJS SPA,运行在 localhost:7000。
响应头包含Set-Cookie
如下:
HTTP/1.1 200 OK
Host: localhost:8000
Date: Sun, 06 Sep 2020 00:50:31 GMT
Connection: close
X-Powered-By: PHP/7.4.10
Cache-Control: no-cache, private
Date: Sun, 06 Sep 2020 00:50:31 GMT
Content-Type: application/json
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Headers: Access-Control-Allow-Headers, Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization, Access-Control-Request-Headers, Set-Cookie
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
Set-Cookie: dv_session=ifhSq8WFD2Upltr5v2bzNBgaA5xx3KiDVuMWuBge; expires=Sun, 06-Sep-2020 02:50:31 GMT; Max-Age=7200; path=/
通过邮递员发出相同的请求,cookie被保存:
因此,浏览器似乎忽略了“Set-Cookie”标头。
我的 session.php 文件如下:
<?php
return [
'driver' => env('SESSION_DRIVER', 'redis'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => env('SESSION_CONNECTION', null),
'table' => 'sessions',
'store' => env('SESSION_STORE', null),
'lottery' => [2, 100],
'cookie' => 'dv_session',
'path' => '/',
'domain' => "",
'secure' => false,
'http_only' => false,
];
为什么 cookie 保存在 Postman 中,但被浏览器忽略?
解决方案
您的问题在 chrome 和 safari 中运行。Firefox 将与您合作。问题是 chrome 不允许来自http域的 cookie,这是您的本地主机。这是他们的最新版本之一。
你在生产中应该没问题,因为你将在那里有一个https证书。但是对于开发,您可以使用 firefox。
另一种解决方法是session.php
将“安全”字段设置为 false。
'secure' => env('SESSION_SECURE_COOKIE', false)
起初这用于解决问题,但我个人决定转移到 firefox,因为该技巧停止工作并且不得不“破解我的方式”解决这个问题,因此更容易更改浏览器进行开发。
推荐阅读
- c++ - 如何在 C++ 的构造函数中传递引用?
- java - 减少函数式 Java 代码中的代码重复
- javascript - Web 的 Firebase 身份验证仅在第二次有效
- docker - 使用 Flask 应用程序和 Solr 构建 Docker
- python - 解锁消费者生成器 fetch_max_wait_ms 不工作
- r - dismo::gbm.step, gbm.simplify 错误
- react-native - 如何强制使用位置来使用该应用程序
- java - 将字节转换为图像时出现格式错误
- java - 当用户将其置于后台时,我的 Android 11 应用程序将停止运行,除非手机已连接到电源
- python - 用于更模块化和可单元测试的代码的设计模式