# session插件
由 session_start 在 swoole下无法使用,该插件则提供了与php-fpm下一样功能的session。
## 插件安装
ESD默认已经启用了session插件,无需安装。
## Session初始化
### 方法1
在继承 goController 的对象内直接使用 $this->session 获取session对象。
### 方法2
在其他对象内添加 `trait`
~~~
use GetSession;
~~~
然后直接使用 $this->getSession() 获取session 对象。
### 方法3
对类中的属性添加注解,进行对象注入。
~~~
use DI\Annotation\Inject;
use ESD\Plugins\Session\GetSession;
/**
* @Inject()
* @var HttpSession
*/
protected $session;
~~~
## session方法
在下面的例子中,将以方法1作为演示。
>[danger]创建 session,类似session_start,但是注意,每调用一次均会创建一次 session_id
~~~
$this->session->create();
~~~
## 查看 session _id
~~~
$this->session->getId();
~~~
## session 是否存在且未过期
~~~
$this->session->isAvailable();
~~~
## session 是否存在
~~~
$this->session->isExist();
~~~
## session 是否新创建
~~~
$this->session->isNew();
~~~
## 设置 session key value
~~~
$this->session->setAttribute();
~~~
## 移除 session key value
~~~
$this->session->removeAttribute();
~~~
## 获取 session
~~~
$this->session->getAttribute();
~~~
## 刷新 session
>[info]当使用 token 方式时,可能需要在 token 过期前进行续期,该方法会重新生成新的 session_id ,如果使用cookie 会生成新的cookie,如果使用token 会在header中返回新的session_id ,客户端收到后应立即保存,因为旧的已经失效。
~~~
$this->session->refresh();
~~~
## 消除 session
~~~
$this->session->destroy();
~~~
## 使用案例
~~~
public function login()
{
$principal = new Principal();
$principal->addRole("user");
$principal->setUsername("user");
$this->setPrincipal($principal);
if ($this->session->isAvailable()) {
return "已登录" . $this->session->getId() . $this->session->getAttribute("test");
} else {
$this->session->create();
$this->session->setAttribute("test", "hello");
return "登录" . $this->session->getId() . $this->session->getAttribute("test");
}
}
public function logout()
{
$this->session->destroy();
return "注销";
}
~~~
## session 配置项
无需配置即可直接使用,如果需要覆盖默认配置,需要将被覆盖的部分参数增加到 `application.yml`文件中。下面依次说明相关配置,
>[info]以下是session插件全部配置及默认值,如不修改默认值,可不必添加参数。
~~~
session:
timeout: 1800 (session过期时间,默认为30分钟)
db: default (session使用的redis标识)
session_storage_class: ESD\Plugins\Session\RedisSessionStorage::class (session驱动)
session_name: "session" (session cookie 名称)
session_usage: 'cookie' (session 维持方式 支持cookie,支持 token)
domain: '' (cookie domain)
path = '/'(cookie path)
http_only: true (cookie 是否仅 httponly)
secure: false (cookie 是否仅 ssl)
~~~
## 覆盖默认配置
在 application.yml 增加配置信息,配置类中的驼峰参数,在配置文件中需要改为下划线和小写。配置中仅需要配置需要覆盖默认配置的选项即可。
~~~
session:
session_name: "mysession"
~~~
配置说明
## session_usage
>[info] 默认使用cookie方式维持session_id 可选 token 方式,token 方式会在http header 中传递 Authorization 参数,由客户端保存 token 维持回话,适用于无状态的API请求。
## session_storage_class
>[info]默认使用 redis 作为 session 驱动,如果使用其他则需要实现 SessionStorage 接口内全部方法。
- 前言
- 捐赠ESD项目
- 使用篇-通用
- 环境
- 安装
- 规范
- 压力测试
- 配置
- 如何设置YML配置
- server配置
- 端口配置
- 项目结构
- 事件派发
- 日志
- 注解
- DI容器
- 自定义进程
- 并发及协程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事务
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 静态文件
- 路由定义
- 修饰方法
- 路由分组
- 资源路由
- 端口作用域
- 异常处理
- 跨域请求
- 路由缓存
- 控制器
- 控制器初始化
- 前置操作
- 跳转和重定向
- 异常处理
- 请求
- 请求对象
- 请求信息
- request消息
- response消息
- stream消息
- url接口
- 验证器
- 内置验证器
- 内置过滤器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服务篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式链路追踪系统
- Consul插件