You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8升级到11后,如何用新MongoDB包存储会话到数据库?

解决Laravel 11使用mongodb/laravel-mongodb存储会话的问题

新的mongodb/laravel-mongodb包已内置MongoDB会话存储支持,无需依赖单独的会话包,可按以下步骤配置:

1. 确认MongoDB包版本

确保安装的mongodb/laravel-mongodb版本支持Laravel 11,要求版本在5.0及以上。版本不符的话执行更新:

composer require mongodb/laravel-mongodb "^5.0"

2. 创建MongoDB会话集合

手动在MongoDB中创建名为sessions的集合,需包含以下字段:

  • _id(自动生成,对应会话ID)
  • user_id(可选,关联用户ID)
  • ip_address(字符串类型)
  • user_agent(字符串类型)
  • payload(字符串类型,存储会话数据)
  • last_activity(整数类型,存储时间戳)

3. 注册MongoDB会话驱动

在app/Providers/AppServiceProvider.php的boot方法中,注册自定义MongoDB会话驱动:

use Illuminate\Support\Facades\Session;
use MongoDB\Laravel\Session\MongoDbSessionHandler;

public function boot()
{
    Session::extend('mongodb', function ($app) {
        $connection = $app['config']['session.connection'] ?? 'mongodb';
        $collection = $app['config']['session.table'] ?? 'sessions';
        
        return new MongoDbSessionHandler(
            $app->make('mongodb.connection')->connection($connection),
            $collection,
            $app['config']['session.lifetime'],
            $app['config']['session.expire_on_close']
        );
    });
}

4. 配置会话参数

修改.env文件

将会话驱动切换为mongodb:

SESSION_DRIVER=mongodb
SESSION_DOMAIN=my.domain
SESSION_COOKIE=myapp_cookie

可选:细化config/session.php配置

如需指定MongoDB连接或集合名称,在config/session.php中补充对应配置:

return [
    // ...其他默认配置
    'driver' => env('SESSION_DRIVER', 'mongodb'),
    'connection' => env('SESSION_CONNECTION', 'mongodb'), // 你的MongoDB连接名
    'table' => env('SESSION_TABLE', 'sessions'), // 会话集合名称
    // ...其他默认配置
];

5. 测试会话功能

清除配置缓存并重启服务,验证登录等会话相关功能:

php artisan config:clear
php artisan cache:clear

此前使用database驱动提示会话过期,是因为默认database驱动适配SQL数据库,与MongoDB存储的用户数据存在兼容性问题,改用上述MongoDB驱动即可解决。

内容的提问来源于stack exchange,提问作者flappix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:37:17