首頁  >  文章  >  後端開發  >  php自訂Session的資訊處理說明

php自訂Session的資訊處理說明

伊谢尔伦
伊谢尔伦原創
2017-04-28 11:44:332013瀏覽

在系統中使用 Session 技術追蹤使用者時,Session 預設的處理方式是 Web 伺服器中的檔案來記錄每個使用者的會話訊息,透過 php.ini 中的 session.save_path 建立會話資料檔案的路徑。這種預設的處理方式雖然方便,但也是有缺陷的。會嚴重影響系統的執行效率。最主要的原因是本身的 Session 機制不能跨機,因為對於訪問量比較大的系統,通常會採用多台伺服器進行並發處理,如果每台伺服器都單獨的處理 Session,就無法達到追蹤使用者的目的。這時就需要改變 Session的處理方式,可以將 Session 資訊使用共享技術保存到其他伺服器中,或使用資料庫來保存 Session 資訊。

無論是用資料庫,或是使用共享技術來共享Session 訊息,其中的原理基本上是一樣的,都是透過PHP中的session_set_save_handler()函數來改變預設的處理方式,指定回呼函數來自訂處理。函數如下所示:

session_set_save_handler(open, close, read, write, destroy, gc)

此函數共需要6個回呼函數作為必選參數,分別代表了Session 生命週期中的6 個過程,透過自訂每個函數,來設定

Session 生命週期中每個環節的資訊處理。

回呼函數 描述   描述
#open 運行session_start()時執行。此含稅需要宣告兩個參數,系統會自動將php.ini 中的 session.save_path 選項值傳遞給函數的第一個參數,將session 位元自動傳遞到第二個參數。傳回 true 則可以繼續向下執行。
close 該函數不需要參數,在腳本執行完成或呼叫session_write_close()、session_destroy()時執行,即在所有Session 操作完成後被執行。如果不需要處理,直接傳回 true。
read 在執行 session_start()時執行,因為在開啟會話時,會去讀取目前 session 資料並寫入 $_SESSION 變數。需要宣告一個參數,系統會自動將Session ID 傳遞給該函數,用於透過Session ID取得對應的使用者數據,傳回目前使用者的會話資訊寫入$_SESSION 變數
write 該函數在腳本結束和對$_SESSION 變數賦值時執行。需要宣告兩個參數,分別是 Session ID 和串列化後的 session 資訊字串。在對$_SESSION 變數賦值時,就可以透過 Session ID 找到儲存的位置,並將資訊寫入。儲存成功後傳回true 並繼續向下執行
destroy #在執行session_destroy()時執行,需要宣告一個參數,系統會自動將Session ID 傳遞給該函數,去刪除對應的會話資訊。
gc 在垃圾回收程式啟動時執行。需要宣告一個參數,系統會將 php.ini 中的 session.gc_maxlifetime 選項值傳給該函數,用於刪除超過這個時間的 Session 資訊。傳回 true 則可以繼續向下執行。

說明:在執行session_start()時分別執行了open(啟動會話)、read(讀取目前session 資料並寫入$_SESSION )和gc (清理垃圾)操作,腳本中所有對 $_SESSION 的操作均不會呼叫這些回呼函數。在呼叫 session_destroy()函數時,執行destroy 銷毀當前 session (一般是刪除回應的記錄或是檔案),但此回呼函數銷毀的只是session 的數據,此時如果輸出

#$_SESSION 變量,任然是有值的,但此值不會在close 後寫回去。在呼叫 session_wrte_close()函數時執行 write 和 close, 保存 $_SESSION至存儲,如果不手工使用,則會在腳本結束時被自動執行。

以上是php自訂Session的資訊處理說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn