craftsys / laravel-redis-session-enhanced
Laravel会话的增强redis驱动器
Requires
- php: ^7.1.3|^8.0|^8.1
- illuminate/support: ^5.2|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ~3.8|^4.0|^5.0|^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^5.3|^6.0|^7.0|^8.0|^9.4|^10.0
README
Laravel的数据库会话驱动器管理数据库中的会话,将以下属性(连同有效载荷)与每个会话更新相关联:`user_id`、`ip_address`、`user_agent`和`last_activty`。可以访问和修改这些属性,为您的客户提供以下功能:
- 跟踪活动会话
- 删除其他会话(从其他设备登出)
- 允许管理员强制登出某些或所有人
- 阻止多个会话
但是,使用数据库驱动程序,**每个对您的应用程序的请求都会更新数据库中的会话表,以跟踪最新的会话信息**,特别是`last_activty`属性。如果会话在配置的`SESSION_LIFETIME`内变为非活动状态,则需要此数据库更新来验证未经认证的请求。这些会话更新在每个请求上都很快速,不应对您的请求时间产生太大影响。但是,如果您确实遇到性能问题,并希望将会话存储在Redis缓存中,您可以使用Laravel的Redis会话驱动器。Redis驱动程序将自动存储和验证会话,但您将失去上述提到的为您的客户提供的能力(跟踪、登出等)。
如果您想拥有数据库会话驱动器类似的功能,但又想使用Redis进行会话存储,那么这个项目就是为您准备的。
目录
安装
该软件包可在Packagist上找到,并且可以通过在shell中执行以下命令通过Composer安装。
composer require craftsys/laravel-redis-session-enhanced
先决条件
- php^7.1
- laravel^5|^6|^7|^8|^9|^10|^11
- redis已安装并配置为laravel
该软件包仅在5.8+、^6.0、^7.0、^8.0、^9.0、^10.0、^11.0上进行测试。
Laravel 5.5+
如果您使用的是Laravel 5.5或更高版本,则该软件包将自动注册`Craftsys\LaravelRedisSessionEnhanced\RedisSessionEnhancedServiceProvider`提供者。
Laravel 5.4及以下
将`Craftsys\LaravelRedisSessionEnhanced\RedisSessionEnhancedServiceProvider`添加到`config/app.php`中的`providers`数组
'providers' => [ // Other service providers... Craftsys\LaravelRedisSessionEnhanced\RedisSessionEnhancedServiceProvider::class, ],
配置
该软件包使用您的现有配置文件,并需要在配置和.env文件中进行以下修改。
- 在`config/database.php`的redis配置中添加一个名为`session`的新连接
[ 'redis' => [ // ... existing configuration // Add new connection for session 'session' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), // new DB, only for sessions for quick access and cleanup, change the value if 2 is already taken 'database' => env('REDIS_CACHE_DB', 2), ], ] ];
- 更新.env文件以包含会话驱动器和连接
SESSION_DRIVER=redis-session SESSION_CONNECTION=session
如果您已缓存配置文件,您可能需要运行`php artisan config:clear`和`php artisan config:cache`以重新验证缓存。
使用
配置完成后,会话数据将自动存储在Redis缓存中,并自动验证。存储在缓存中的会话数据具有以下属性。
{ "id": string, // session id "user_id": number|string, // user id "ip_address": null|string, // request ip address "user_agent": string, // request user agent "last_activty": number, // user's last request timestamp "payload": string, // serialized/encrypted session data, }
如果您想在应用程序代码中获取会话的底层处理器(RedisSessionEnhancerHandler
实例),可以使用 Illuminate\Support\Facades\Session::getHandler()
。配合 Laravel 定制的会话驱动器接口,该辅助工具提供了 readAll
和 destroyAll
方法以处理存储的会话。此外,该软件包还包括一个用于处理会话的辅助工具。
SessionHelper
要从缓存中检索存储的会话数据,应使用 Craftsys\LaravelRedisSessionEnhanced\SessionHelper
类。此辅助类还处理 SESSION_DRIVER=database
驱动器,使您能够根据应用程序需求轻松地在数据库和 Redis 驱动器之间切换,而无需修改应用程序的会话代码。
以下是一些提供的辅助函数:
use Craftsys\LaravelRedisSessionEnhanced\SessionHelper; // 1. Show the active/all sessions of a User SessionHelper::getForUser($user_id) // get collection of all sessions of a user SessionHelper::getForUser($user_id, true) // get collection of all active sessions of a user // 2. Remove all/other sessions of a user SessionHelper::deleteForUserExceptSession($user_id, [request()->session()->id]) // delete user's sessions except the current request SessionHelper::deleteForUserExceptSession($user_id) // delete all sessions of a user // 3. Remove All sessions (can be used in a command to flush out all sessions by DevOps) SessionHelper::deleteAll() // delete all the sessions stored in database of every // 4. Check if the application is configured with valid driver (database/redis). SessionHelper::isUsingValidDriver() // return true if using SESSION_DRIVER=database or SESSION_DRIVER=redis-session