craftsys/laravel-redis-session-enhanced

Laravel会话的增强redis驱动器

v1.0.5 2024-04-25 12:50 UTC

This package is auto-updated.

Last update: 2024-09-25 13:53:50 UTC


README

Total Downloads Latest Stable Version License Status

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文件中进行以下修改。

  1. 在`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),
    ],
  ]
];
  1. 更新.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 定制的会话驱动器接口,该辅助工具提供了 readAlldestroyAll 方法以处理存储的会话。此外,该软件包还包括一个用于处理会话的辅助工具。

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