我用的是Laravel 7.30.6。
我正在尝试迁移我的系统,目前我使用的是SESSION_DRIVER=file
,我打算使用数据库来验证与相应登录用户的活动会话。使用文件模型,一切都运行正常。切换到数据库时,数据库中会发生以下过程:
- 在数据库中生成并保存id和相应的会话信息。
- 登录时,此信息将使用user_id更新,其他信息将保留。
- 我从那里采取的任何操作(例如,转到另一个屏幕或重新加载页面)都会导致我当前的数据库行被删除,生成一个新的ID,没有user_id,我会自动注销。
在其中一个屏幕中,我一直按f5键,以查看哪个id是通过session()->getId()
生成的,它总是生成一个新的id(这发生在所有视图上)。
难道我忘了什么?系统中有什么东西阻止了访问吗?
我只在系统注销时使用Session::flush()
,通过一个按钮触发,所以我没有强行清理它。
My config/session.php
<?php
return [
'driver' => env('SESSION_DRIVER', 'database'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'store' => null,
'lottery' => [2, 100],
'cookie' => env(
'SESSION_COOKIE',
str_slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'secure' => env('SESSION_SECURE_COOKIE', false),
'http_only' => true,
'same_site' => null,
];
my.env包含SESSION_DRIVER=database
和SESSION_LIFETIME=120
,数据库为mysql。
表、模型和控制器已创建,通过“文件”使用时工作正常。
使用session()->regenerate()
强制重新生成id,即使在登录后也不会改变任何内容。
同样在路由中我使用了'网络'中间件,但没有什么变化
1条答案
按热度按时间yzckvree1#
找到问题了!在生成自动表时,使用laravel命令本身
php artisan session:table
,它将'payload'
列创建为text
,然而,在我的情况下,它的大小不足,导致每当我重新加载或输入另一个页面时,该过程都会重复(因为路径和值 失踪)。完成后,我使用自己的命令创建了它,并将字段放置为LongText
(我没有测试MediumText
是否足够,但我已经使它更大,因为表以一定的频率记录和删除数据,对我来说它不会改变太多)。这里是我的迁移: