### 什么是session
- session 被稱為會話,主要是保持某個訪問者的數據
- 客戶端訪問服務器,通過session_id獲取自己存儲在服務器端的數據
- session_id通過兩種方式傳遞給服務端:URL,cookie
### session開啟
- php.ini文件 session.auto\_start設置為1,則自動開啟session或手動開啟 調用session_start()函數
- 開啟后,先初始化$_SESSION。(通過客戶端傳遞過來的session_id,讀取相應的session文件里面的內容,在將反序列化之后,賦值給$_SESSION超全局數組。第一次訪問若沒有session_id,則$_SESSION為空數組)
- session_start()這個階段還會判斷哪些session文件已經過期,然后再觸發垃圾回收機制進行回收
- session_start()之后,腳本運行周期內,php只是對$_SESSION這個超全局數據進行操作,并沒有影響session文件,除非執行了session_destroy()操作。
- 腳本執行結束階段,才會對session文件進行操作,也就是把$_SESSION數組中的數據序列化然后存儲到session文件中
- 在會話開啟后,對于基于文件的會話數據存儲器而言,在會話開始的時候會給數據文件加鎖,直到php腳本執行完畢,或者顯示的調用session_write_close()來保存會話數據,在此期間,其他腳本不可以訪問同一個會話數據文件
### session配置
- session.cookie_lifetime 已秒數指定發送到瀏覽器的cookie的什么周期,值為0表示‘ 直到關閉瀏覽器
- session.save_handler = redis session的存儲器,默認是 file
- session.save_path = "tcp://127.0.0.1:6379" session的存儲路徑
- session.gc_probability = 1; 清楚無效session的基率
- session.gc_divisor = 5000; 啟動垃圾回收程序的概率。概率計算公式:session.gc_probability / session.gc_divisor
- session.gc_maxlifetime session文件過期時間。超過這個時間沒有使用session將視為垃圾。將在下次垃圾回收時刪除。
### 自定義的session存儲
- 先修改配置文件 `ini_set('session.save_handler', 'use')`
- 自定義session存儲層
```
參數1:表示session_strat的時候處理的函數
參數2:表示腳本結束的時候處理的函數
參數3:讀取session數據表中的數據函數
參數4:向session數據表中寫入數據函數
參數5:銷毀session數據表中的數據函數
參數6:session過期之后的處理函數
session_set_save_handler($open,$close,$read,$write,$destroy,$gc);
//回調函數
function open{
//初始化連接數據庫
}
function close{
return true;
}
//讀取session數據表中的數據
//系統會自動把客戶攜帶過來的session_id傳遞給read里面
function read($session_id){
//執行查詢操作
//return 返回查詢的結果
}
//在session數據表中寫入數據
//當$_SESSION['name']='zhangsan';的操作時,就會把數據寫入到session表中
function write($session_id,$session_content){
//執行插入操作
}
//當執行session_destroy的操作是,會執行destroy函數
//銷毀session,系統自動會把sessionid傳遞給函數
function destroy($sessionid){
//執行刪除操作
//return 返回刪除的結果
}
//當session_start()的時候判斷哪些session過期了,會自動把session數據的有效期傳遞過來。
function gc($max_lifetime){
$time = time-$max_lifetime;
然后和數據庫中的最后一次訪問的時間作比較,要是過期了就執行刪除操作
}
```
- linux 基礎
- ln 鏈接
- linux 環境變量
- linux 進程查看
- nginx
- redis
- redis 安裝
- php 底層原理
- php源碼編譯安裝
- phpize文件
- php命令行
- php7 新特性
- php7 變量
- php7 生命周期
- php sapi運行模式
- php 內存管理
- php 運行機制和Zend虛擬機
- php垃圾回收
- php 基礎
- php.ini
- php函數
- 面向對象
- php 文件上傳
- ob緩沖和頁面靜態化
- php中的session
- php cURL擴展
- composer 應用
- php 錯誤和異常
- thinkphp
- tp6容器和依賴注入
- tp6 的服務
- tp6事件
- tp6 多應用
- tp6路由
- tp6 cache
- tp6 request
- tp6 中間件
- tp6 response
- tp6 Db
- 備忘錄
- 數據庫表