關於php的session

session的運行流程:

session_start()以後,先看客戶端的cookie裏是否有有效的cookie,如果沒有就會建個cookie裏面寫上一個sessionid比如xxxxxxxxxxxxxxxxxxxxx。

然後呢,客戶端就會把這個xxxxxxxxxxxxxxxxxxxxx交給服務器,服務器在自己那裏某個指定的文件夾下找有沒有sess_xxxxxxxxxxxxxxxxxxxxx這個文件,找不到就會建一個,然後要讀要寫的內容就都放在這裏,這個文件呢就是所謂的session。



php.ini中的幾個參數:

session.cookie_lifetime:cookie有效期限(從創建時間開始算,但如果設爲0,則到下次開啓瀏覽器爲止)

session.gc_maxlifetime:session有效期限(從上次被修改時間開始算)

session.gc_probability & session.gc_divisor:每次start_session()的時候有session.gc_probability / session.gc_divisor的概率觸發gc(garbage collection),gc會把服務器上的session掃一遍,然後刪除掉過期的session。




在php頁面中,session_start()以後是:

先修改session(就算那個php頁面什麼都不做只是session_start()一下,對應的session文件的修改時間也會被update);

然後再碰運氣看有沒有觸發gc。

所以如果某用戶在對應的session過期以後,自己的cookie過期以前又訪問了這個網站,且期間其他用戶的訪問都恰好沒有觸發那個gc,那麼這個用戶對應的session文件依然存在,且其有效時間又會被刷新。

發佈了71 篇原創文章 · 獲贊 4 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章