php中session的運行機制


在PHP中session默認是以文件的形式存儲於服務器的

而客戶端和服務端則是通過session_id來完成握手的,默認情況下PHP會將session_id存儲於cookie中,用戶每次請求時該session_id都會通過cookie傳到服務器,下面是php.ini中的相關配置信息:

session.save_path="C:\xampp\tmp" 文件的存儲路勁

session.use_cookies=1 是否使用cookie存取session_id

session.name=PHPSESSID 存儲session_id的鍵名

session.use_only_cookies=0 是否只使用cookie來處理session_id

如何改變session的默認存儲方式:

在php中我們可以通過使用session_set_save_handler函數才改變這種默認方式,該方法有兩種形式的重載

php < 5.4 : 接受接受6個回調函數來執行session的管理SessionHandlerInterface

打開(open):接受兩個參數:1,文件路勁;2,session_id

關閉(close)

讀取(read):讀取session信息,接受一個session_id作為參數

寫入(write):將信息寫入session,接受一個session_id作為參數

銷毀(destroy):銷毀一個session,接受一個session_id作為參數

回收(gc):當出發session回收時調用,接受一個session的過期時間(lifetime)作為參數

php>=5.4 session_set_save_handler可以接受一個SessionHandlerInterface的實例來設置session的存儲方式

我們可以通過實現SessionHandlerInterface接口,或者重寫SessionHandler類方法的實現,來編寫自定義的session

下面說說session的回收機制

在php中session的回收時由session的回收頻率和過期時間決定的,在php.ini中表現為

session.gc_probability=1

session.gc_divisor=100

session.gc_maxlifetime=1440

gc_maxlifetime很好理解,表示session的過期時間1440秒

gc_probability/gc_divisor 為session回收的頻率,這個怎么理解呢,每次在我們調用session_start()的時候我們都有可能調用gc方法對過期的session進行回收,如上面設置所示,這里回收的概率為1/100,如果用戶的每次請求我們都去回收過期session可能會對服務器造成壓力,特別是請求特別多的時候,所以往往session的回收頻率應該根據站點的訪問量來調節

session_start細節

session_start首先會生成一個session_id,默認情況下會將這個ID寫入一個會話cookie,之后會調用open,read方法,生成全局變量$_SESSION,之后做gc處理,所以如果我們的web應用只有一個會話,那么這個會話的信息是永遠不會丟失的即使我們的會話已經過期。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM