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
相关产品推荐
相关产品推荐

