SESSION基本使用
SESSION原理
Session與瀏覽器無關,但是與Cookie有關,
1、PHP碰到session_start()時開啟session會話,會自動檢測sessionID
a)如果Cookie中存在,使用現成的
b)如果Cookie中不存在,創建一個sessionID,并通過回應頭以Cookie形式保存到瀏覽器上
2、初始化超全域變數 S E S S I O N 為 一 個 空 數 組 3 、 P H P 通 過 s e s s i o n I D 去 指 定 位 置 ( s e s s i o n 文 件 存 儲 位 置 ) 匹 配 對 應 的 文 件 a ) 不 存 在 該 文 件 : 創 建 一 個 s e s s i o n I D 命 名 文 件 b ) 存 在 該 文 件 : 讀 取 文 件 內 容 ( 反 序 列 化 ) , 將 數 據 存 儲 到 _SESSION為一個空陣列 3、PHP通過sessionID去指定位置(session檔案存盤位置)匹配對應的檔案 a)不存在該檔案:創建一個sessionID命名檔案 b)存在該檔案:讀取檔案內容(反序列化),將資料存盤到 S?ESSION為一個空陣列3、PHP通過sessionID去指定位置(session檔案存盤位置)匹配對應的檔案a)不存在該檔案:創建一個sessionID命名檔案b)存在該檔案:讀取檔案內容(反序列化),將資料存盤到_SESSION中
4、腳本執行結束,將$_SESSION中保存的所有資料序列化存盤到sessionID對應的檔案中
SESSION基本使用
啟用session,任何時候都需要開啟session(腳本使用到$_SESSION就開啟一次)
$_SESSION是通過session_start()函式的呼叫才會定義的,沒有直接定義
Session使用需要開啟session_start
設定SESSION資訊
如果想存盤資料到session中,那么只要不斷給$_SESSION陣列添加元素即可
讀取SESSION資訊
$_SESSION就是一個陣列,存盤什么資料,什么方式存的,就是可以通過什么方式訪問什么資料

會話技術的本質是為了實作跨腳本共享資料:在一個腳本中定義資料,在另外一個腳本中保存資料
SESSION基本使用
洗掉session就是將session資料清理掉( S E S S I O N 拿 不 到 ) 刪 除 一 個 S E S S I O N 信 息 U n s e t ( _SESSION拿不到) 洗掉一個SESSION資訊 Unset( S?ESSION拿不到)洗掉一個SESSION資訊Unset(_SESSION[元素下標])洗掉指定session資料
洗掉全部SESSION資訊
洗掉全部資料就是讓$_SESSION變成一個空陣列
SESSION基本使用
SESSION相關配置
SESSION基礎配置
1)session.name:session名字,保存到COOKIE中sessionID對應的名字
2)session.auto_start:是否自動開啟session(無需手動session_start()),默認是關閉的
3)session.save_handler:session資料的保存方式,默認是檔案形式
4)session.save_path:session檔案默認存盤的位置
使用系統的檔案夾存盤不安全,需要指定對應存盤路徑
SESSION常用配置
1)session.cookie_lifetime:PHPsessionID在瀏覽器端對應COOKIE的生命周期,默認是會話結束
2)session.cookie_path:sessionID在瀏覽器存盤之后允許服務器訪問的路徑(COOKIE有作用范圍)
3)session.cookie_domain:COOKIE允許訪問的子域(COOKIE可以跨子域)
配置的兩種形式
1)php.ini中配置:全域配置,修改php.ini中的配置項
2)腳本中配置:PHP可以通過ini_set函式來在運行中設定某些配置項(只會對當前運行的腳本有效),把這種配置稱之為專案級
@Ini_set(‘session.save_path’,’E:/server/sessions’);
SESSION基本使用
Session洗掉是指洗掉session資料,$_SESSION中看不到而已;銷毀session是指洗掉session對應的session檔案,
銷毀SESSION
系統提供一個函式:session_destroy(),會自動根據session_start得到的sessionID去找到指定的session檔案,并把其洗掉,
SESSION基本使用
SESSION垃圾回識訓制
垃圾回識訓制原理
session會話技術后,session檔案并不會自動清除,如果每天有大量session檔案產生但是又都是失效的,會增加服務器的壓力和影響session效率,
垃圾回收,是指session機制提供了一種解決垃圾session檔案的方式:給session檔案指定周期,通過session檔案最后更改時間與生命周期進行結合判定,如果已經過期則洗掉對應的session檔案,如果沒有過期則保留,這樣就可以及時清理無效的僵尸檔案,從而提升空間利用率和session作業效率,
1、任何一次session開啟(session_start),session都會嘗試去讀取session檔案
2、讀取session檔案后,有可能觸發垃圾回識訓制(在session系統中也是一個函式:自己有一定幾率呼叫)
3、垃圾回識訓制會自動讀取所有session檔案的最后編輯時間,然后加上生命周期(組態檔)與當前時間進行比較(所有session檔案)
a)過期:洗掉
b)有效:保留
垃圾回收引數設定
1)session.gc_maxlifetime = 1440:規定的session檔案最大的生命周期是1440秒,24分鐘
2)session.gc_probability = 1:垃圾回收概率因子(分子)
3)session.gc_divisor = 1000:垃圾回收概率分母
默認的觸發概率是1/1000

測驗垃圾回收效果:
1、 修改生命周期為2分鐘,120秒
2、 修改觸發幾率:100%
SESSION基本使用
禁用COOKIE后如何使用SESSION
禁用COOKIE不能使用SESSION原因
Session技術需要利用到COOKIE技術來保存sessionID,從而使得PHP能夠在跨腳本的時候得到相同的sessionID,從而訪問同一個session檔案,
解決思路:最終讓session_start在開啟之前拿到原來的sessionID(另外一個腳本的)
實作無COOKIE使用SESSION
在PHP中,想要解決沒有COOKIE也實作session技術的方式有兩種:
方案1:可以利用PHP提供的session函式:session_id和session_name來獲得和設定sessionID或者name從而解決session_start產生新sessionID的情況(手動操作):
1、 在session保存資料的腳本中獲取sessionID和名字
2、 想辦法將資料傳遞給另外一個腳本:表單傳值(URL或者form表單)
3、 在需要使用到session的腳本中,先接收資料
4、 組織session_start產生新的ID,告訴它已經存在:session_id($id)
方案2:可以利用session集中已經提供的解決方案自動操作(配置)
原因1:默認session配置只允許使用COOKIE保存sessionID:cookie_ony
原因2:默認關閉了其他能夠傳送資料的方式,只保留了COOKIE
1、 修改PHP組態檔,開啟其他方式傳輸sessionID,關閉只允許使用COOKIE傳輸功能
2、 一旦配置開啟,PHP會自動將sessionID和session名字在其他位置系結資料,同時還會在session_start的時候,考慮其他方式傳遞(表單)的資料,而不是只有COOKIE

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431971.html
標籤:其他
上一篇:手寫個注冊中心
