koded / session
具有自定义处理程序和 php.ini 支持的会话库
Requires
- php: ~7.3
- ext-json: *
- koded/cache-simple: ~2
- koded/http: ~1
- psr/http-server-middleware: ~1
Requires (Dev)
- phpunit/phpunit: ~7
- scrutinizer/ocular: ^1.6
Suggests
- ext-memcached: *
- ext-redis: *
This package is auto-updated.
Last update: 2024-09-05 03:44:10 UTC
README
该库依赖于 php.ini
设置。可以使用 Koded\Session\SessionConfiguration
对象重置每个会话 ini 指令。
参考php.ini会话指令: https://php.ac.cn/manual/en/session.security.ini.php
使用方法
会话可以通过以下两种方法之一自动启动
应用配置
[ 'session' => [ // your ini "session." overwrites, without "session." prefix ] ]
或使用 SessionMiddleware
将此中间件类包含在您的中间件堆栈中
// your middleware stack $middleware = [ SessionMiddleware::class ];
会话类和函数
session()->get('key'); session()->set('key', 'value'); // etc.
可以实例化并使用会话类,但建议使用 session()
函数而不是 Session
类的实例。
处理程序配置
最基本的操作是定义您想要用于会话的处理程序
// in your configuration file return [ 'session' => [ 'save_handler' => 'redis | memcache' ] ]
如果您没有选择 Redis 或 Memcached,则默认为 files
处理程序,这是 PHP 的默认会话机制。
然而,如果您的应用程序在 Docker、Kubernetes、分布式环境等中运行,则可能不希望使用 files
处理程序。
在几乎所有情况下,Redis 都是 PHP 会话的最佳选择。
警告:Memcached 可能会丢失会话数据,因为这是它的性质。请谨慎使用!
Redis 处理程序
[ 'session' => [ 'save_handler' => 'redis' // OPTIONAL, these are the defaults 'host' => 'localhost', 'port' => 6379, 'timeout' => 0.0, 'retry' => 0, 'db' => 0, 'prefix' => 'sess:', 'serializer' => 'php', // or "json" 'binary' => false, // TRUE for igbinary ] ]
典型的 Redis 设置
- 1 服务器
- 应用程序和 Redis 在同一台机器上
- Redis (127.0.0.1:6379)
- 无认证(Redis 不可从外部访问)
[ 'session' => [ 'save_handler' => 'redis', 'name' => 'session-name', 'prefix' => 'sess:', // isolate the session data in other db 'db' => 1 ] ]
要支持大量数据,您需要良好的系统管理员技能和丰富的知识来设置 Redis 服务器。
Memcached 处理程序
[ 'session' => [ 'save_handler' => 'memcached', // OPTIONAL: defaults to ['127.0.0.1', 11211] // If you have multiple memcached servers 'servers' => [ ['127.0.0.1', 11211], ['127.0.0.1', 11212], ['127.0.0.2'] ... ], // OPTIONAL: the options are not mandatory 'options' => [ ... ] ] ]
典型的 Memcached 设置
- 1 服务器
- 应用程序和 Memcached 在同一台机器上
- Memcached (127.0.0.1:11211)
[ 'session' => [ 'save_handler' => 'memcached', 'name' => 'session-name', 'prefix' => 'sess.' ] ]
要支持大量用户,您需要在服务器上拥有足够的 RAM。但 Memcached 是这项技术的佼佼者,所以您应该没问题。
文件处理程序
这不是为任何严肃的商业用途推荐的处理程序。它只适用于小型项目。
所有会话指令都来自 php.ini
。
[ 'session' => [ // OPTIONAL: defaults to "session_save_path()" // the path where to store the session data 'save_path' => '/var/www/sessions', 'serialize_handler' => 'php' ] ]
典型的原生 PHP 会话设置
[ 'session' => [ // really nothing, // skip this section in your configuration ] ]
如果您已经扩展了应用程序,则不能使用此处理程序,因为会话数据很可能会在每次 HTTP 请求时随机处理在不同的实例上。