ThinkPHP6 使用`\think\Session`對`PHP`原生的`Session`操作做了包裝,更方便使用。
## 概述
可以直接使用`think\facade\Session`類操作`Session`。
> 新版本不支持操作原生`$_SESSION`數組和所有`session_`開頭的函數,只能通過`Session`類(或者助手函數)來操作。會話數據統一在當前請求結束的時候統一寫入,所以不要在`session`寫入操作之后執行`exit`等中斷操作,否則會導致`Session`數據寫入失敗。
## 開啟Session
`Session`功能默認是沒有開啟的(API應用通常不需要使用`Session`),如果你需要使用`Seesion`,需要在全局的中間件定義文件中開啟:
~~~
'think\middleware\SessionInit'
~~~
> 如果是多應用模式,并且你只是用于部分應用,那么也可以在應用中間件定義文件中單獨開啟。
## Session初始化
系統會自動按照`session.php`配置的參數自動初始化`Session`。
默認支持的`session`設置參數包括:
| 參數 | 描述 |
| --- | --- |
| type | session類型(`File`或者`Cache`) |
| store | 當type設置為cache類型的時候指定存儲標識 |
| expire | session過期時間(秒)必須大于0 |
| var\_session\_id | 請求session\_id變量名 |
| name | session\_name |
| prefix | session前綴 |
| serialize | 序列化方法 |
無需任何操作就可以直接調用`Session`類的相關方法,例如:
~~~
Session::set('name', 'thinkphp');
Session::get('name');
~~~
會話數據保存(請求結束)的時候會自動序列化,并在讀取的時候自動反序列化,默認使用`serialize`/`unserialize`進行序列化操作。
## 基礎用法
### 賦值
~~~
Session::set('name', 'thinkphp');
session('name', 'foobar');
~~~
### 判斷是否存在
~~~
Session::has('name');
session('?name');
~~~
### 取值
~~~
// 如果值不存在,返回null
Session::get('name');
session('name');
// 如果值不存在,返回空字符串
Session::get('name', '');
// 獲取全部數據
Session::all();
~~~
### 刪除
~~~
Session::delete('name');
session('name', null);
~~~
### 取值并刪除
~~~
// 取值并刪除
Session::pull('name');
~~~
如果name的值不存在,返回`Null`。
### 清空
~~~
Session::clear();
session(null);
~~~
### 閃存數據,下次請求之前有效
~~~
// 設置session 并且在下一次請求之前有效
Session::flash('name','value');
~~~
### 提前清除當前請求有效的數據
~~~
// 清除當前請求有效的session
Session::flush();
~~~
> 注意:不要在寫入`Session`數據之后使用exit等中斷操作,可能會導致`Session`沒有正常寫入。
## 多級數組
支持`session`的多級數組操作,例如:
~~~
// 賦值
Session::set('name.item','thinkphp');
// 判斷是否賦值
Session::has('name.item');
// 取值
Session::get('name.item');
// 刪除
Session::delete('name.item');
~~~
其中`set`和`delete`方法只能支持二級數組,其他方法支持任意級數組操作。
## 助手函數
系統也提供了助手函數`session`完成相同的功能,例如:
~~~
// 賦值
session('name', 'thinkphp');
// 判斷是否賦值
session('?name');
// 取值
session('name');
// 刪除
session('name', null);
// 清除session
session(null);
~~~
## 應用獨立會話
> 多應用情況下默認`Session`是跨應用的,如果不希望共享會話數據,可以給每個應用設置不同的前綴`prefix`。
如果是File類型的話,默認的`session`會話數據保存在`runtime/session`目錄下面。
## Session驅動
默認的`Session`驅動采用文件緩存方式記錄。除了文件類型之外,還可以支持直接使用緩存作為`Session`類型,例如:
~~~
return [
'type' => 'cache',
'store' => 'redis',
'prefix' => 'think',
]
~~~
表示使用`redis`作為`session`類型。
要以上的配置生效,請確保緩存配置文件`cache.php`中的`stores`中已經添加了`redis`緩存配置,例如:
~~~
return [
'default' => 'file',
'stores' => [
......
// redis緩存
'redis' => [
// 驅動方式
'type' => 'redis',
// 服務器地址
'host' => '127.0.0.1',
],
],
];
~~~
- 搭建ThinkPHP6的開發環境
- 配置ThinkPHP6
- 必要的基礎知識(basic)
- MVC開發模式
- 控制器(controller)
- 數據庫(database)
- 模型(model)
- 模型關聯(relation)
- 視圖(view)
- Session
- Cookie
- 緩存(cache)
- 上傳(upload)
- 驗證器(validate)
- 驗證碼(captcha)
- 命令行(command)
- 服務器部署(deploy)
- 數據備份(backup)
- 數據同步(synchronization)
- 訂閱服務(subscribe)
- PHP 易混淆知識點
- 助手函數
- MySQL規范
- Redis 規范
- office插件 phpoffice
- 拼音插件 pinyin
- 日期插件 datetime
- 消息插件 amqp
- 產品部署環境的搭建
- PDF 等雜項處理
- 文件上傳
- 常用擴展
- flc/dysms
- 使用示例 ①
- 使用示例 ②
- qiniu/php-sdk
- 簡介
- 使用示例
- 使用示例 2 ②
- liliuwei/thinkphp-jump
- 擴展介紹
- 下載擴展
- 使用方法
- topthink/think-captcha
- 安裝擴展
- 驗證碼顯示
- 更換驗證碼
- 驗證碼校驗
- 驗證碼配置
- 自定義驗證碼
- phpoffice/phpspreadsheet
- 數據寫入表格
- 讀取表格數據
- topthink/think-queue
- 安裝
- 自定義函數
- 任務類
- 帶有日志的任務類