我在存储 session cookie 时遇到数据库驱动程序问题:
数据库连接当前正在工作,但浏览器中未设置 cookie,但 session 数据位于我的数据库中。
我已经跑了:
php artisan session:table
在我的 .env
文件中设置数据库 session :
SESSION_DRIVER=database
下面是config/session.php
文件:
[
'driver' => env('SESSION_DRIVER', 'file'),
'connection' => 'mysql',
'table' => 'sessions',
]
编辑1:
web.php
中的路由:
Route::group(['domain' => GetDomainInfo::GetDomainName(), 'middleware' => 'web'], function () {
Route::get('/', "HomeController@index");
});
问题解决者:
例如,我通过添加到我的 hosts
文件中创建了一个本地主机域:webcv:
127.0.0.1 webcv.local
127.0.0.1 admin.webcv.local
在 config/session.php 中将 session 域设置为:.webcv.local,如下所示:
'domain' => env('SESSION_DOMAIN', ".webcv.local"),
或者只需添加 .env
文件:
SESSION_DOMAIN=.webcv.local
现在我可以使用相同的 cookie 访问 webcv.local
和 admin.webcv.local
。
最佳答案
当您使用 session 的数据库驱动程序时,您必须创建 session 表。
我假设您已经通过执行 php artisan make:auth
搭建了 native 身份验证系统并迁移了迁移。
因此,首先生成迁移,然后迁移:
php artisan session :表
执行迁移:
php artisan 迁移
显然,如果您正在检查的路由没有使用 web
中间件,这将不起作用。
如果您没有在 /routes/web.php
中注册路由,则必须手动为其指定 web
中间件。要么在 Controller 的构造函数中,要么直接在路由本身中。
修复后编辑以供将来引用:
此外,请检查 config/session.php
中的域是否与您在开发或生产中使用的域相同,具体取决于您的工作位置。
关于php - 设置 session 域时 Laravel 数据库 session 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45129617/