Session
IMI 的 Http Session 目前内嵌支持文件和 Redis 两种存储方式,当然你也可以自行扩展更多存储方式。
如果想要启用 Session,需要在配置文件中进行设置。
配置
在服务器配置文件中:
return [
'beans' => [
'SessionManager' => [
// 指定Session存储驱动类
'handlerClass' => \Imi\Server\Session\Handler\File::class,
],
'SessionConfig' => [
// session 名称,默认为imisid
// 'name' => '',
// 每次请求完成后触发垃圾回收的概率,默认为1%,可取值0~1.0,概率为0%~100%
// 'gcProbability' => 0.1,
// 最大存活时间,默认30天,单位秒
// 'maxLifeTime'=> 0.1,
// session 前缀
// 'prefix' => 'imi',
],
'SessionCookie' => [
// Cookie 的 生命周期,以秒为单位。
'lifetime' => 86400 * 30,
// 此 cookie 的有效 路径。 on the domain where 设置为“/”表示对于本域上所有的路径此 cookie 都可用。
// 'path' => '',
// Cookie 的作用 域。 例如:“www.php.net”。 如果要让 cookie 在所有的子域中都可用,此参数必须以点(.)开头,例如:“.php.net”。
// 'domain' => '',
// 设置为 TRUE 表示 cookie 仅在使用 安全 链接时可用。
// 'secure' => false,
// 设置为 TRUE 表示 PHP 发送 cookie 的时候会使用 httponly 标记。
// 'httponly' => false,
],
// 中间件
'HttpDispatcher' => [
'middlewares' => [
// 中间件
\Imi\Server\Session\Middleware\HttpSessionMiddleware::class,
],
],
],
];
其中每一种存储方式还有特别的配置项,请看下文。
文件
服务器配置文件->beans中加入:
'beans' => [
'SessionFile' => [
'savePath' => 'Session文件存储路径',
]
]
文件 Session 未来不支持分布式,推荐使用 Redis!
Redis
'beans' => [
'SessionRedis' => [
// Redis连接池名称
'poolName' => '',
// Redis中存储的key前缀,可以用于多系统session的分离
// 'keyPrefix' => 'imi.',
]
]
Session 存储序列化方式配置
根据你选用的存储驱动类,配置在对应的节里,下面以文件驱动演示
'beans' => [
'SessionFile' => [
'formatHandlerClass' => \Imi\Util\Format\SwooleSerialize::class,
]
]
可以选用的序列化类:
JSON:\Imi\Util\Format\Json::class
PHP序列化:\Imi\Util\Format\PhpSerialize::class
Swoole 序列化:\Imi\Util\Format\SwooleSerialize::class
PHP Session 序列化:\Imi\Util\Format\PhpSession::class
使用
引入 Session 类
use Imi\Server\Session\Session;
读取
// 获取值
Session::get('aaa');
// 获取值,如果不存在则返回默认值
Session::get('aaa', 'default value');
// 获取$session['a']['b']的值
Session::get('a.b');
// 获取$session[前缀]['aaa']的值,前缀在配置文件中设置
Session::get('@.aaa');
写入
Session::set($name, $value)
删除
Session::delete($name)
读取并删除
Session::once($name, $default = false)
清空
Session::clear();