php Laravel会话在刷新/获取另一个视图时重新生成ID

yv5phkfx  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(168)

我用的是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=databaseSESSION_LIFETIME=120,数据库为mysql。
表、模型和控制器已创建,通过“文件”使用时工作正常。
使用session()->regenerate()强制重新生成id,即使在登录后也不会改变任何内容。
同样在路由中我使用了'网络'中间件,但没有什么变化

yzckvree

yzckvree1#

找到问题了!在生成自动表时,使用laravel命令本身php artisan session:table,它将'payload'列创建为text,然而,在我的情况下,它的大小不足,导致每当我重新加载或输入另一个页面时,该过程都会重复(因为路径和值 失踪)。完成后,我使用自己的命令创建了它,并将字段放置为LongText(我没有测试MediumText是否足够,但我已经使它更大,因为表以一定的频率记录和删除数据,对我来说它不会改变太多)。
这里是我的迁移:

public function up()
{
    Schema::dropIfExists('sessions');
    Schema::create('sessions', function (Blueprint $table) {
        $table->string('id')->unique();
        $table->unsignedInteger('user_id')->index('session_user_id_foreign')->nullable();
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('ip_address', 45)->nullable();
        $table->text('user_agent')->nullable();
        $table->longText('payload');
        $table->integer('last_activity');
    });
}

public function down()
{
    Schema::dropIfExists('sessions');
}

相关问题