# 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插件