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 请求时随机处理在不同的实例上。