2010年2月12日

PHP的會話管理--session

PHP的變數作用範圍是侷限在同一個PHP文件中的,在函式主體中的變數作用範圍更是被侷限在函式主體{}中;form可以讓我們在兩個頁面中傳遞資訊,當我們需要在所有的頁面中都存在的資訊,則可以通過儲存於伺服器端和瀏覽器用戶端的Session和Cookie兩種變數,來實現全站有效的作用範圍。

Session的概念
使用者訪問一個網站時往往需要瀏覽許多網頁,對於一個PHP程式設計的網站來說,用戶在連結的過程中需要執行許多的PHP指令檔,然而由於HTTP協議本身的特點,使用者每執行一個PHP程式都需要和Web伺服器重新建立連結;又由於無狀態記憶的特點,此次連結無法得到上次連結的狀態,這樣,使用者在一個PHP程式中對一個變數進行了指派操作,而在另一個PHP程式中是無法得到這個變數的值的。
由於這兩個特點,我們無法得知使用者的瀏覽狀態,此時就需要透過Session 這樣的機制來記錄使用者的有關資訊,以供使用者再次以此身份對Web伺服器提出請求時做確認。Session解決方案,就是要提供在PHP程式中定義跨網頁全域變數的方法,使得這個全域變數在同一個Session中對所有的PHP程式都有效。
Session通常是和Cookie聯合工作的,首先在伺服器端PHP為建立Session的使用者產生一個獨一無二的字串,用來標識這個使用者的Session,一般將這個字串稱作Session ID,然後以”sess”+Session ID 為檔案名在伺服器的檔案系統中建立一個文件,在文件中保存用戶在Session 所定義的全域變數的變數名和值,最後再將Session ID作為一個名為PHPSession的Cookie保存在用戶端的檔案系統中。然後,當用戶再次連接伺服器訪問一個PHP程式時,PHP從用戶發來的PHPSession這個Cookie中得到用戶所有Session的Session ID,並根據Session ID從伺服器的檔案系統中找到保存Session資訊的文件,從這個文件中讀出用戶在上次連接時所設置的全域變數值。

使用Session
在PHP中,Session的變數是用文件的形式來儲存的,要想使用Session,需要先在php.ini中設置Session文件的位置,將其替換成我們自己設定的Session目錄。PHP程式中的Session變數不是直接就可以使用的,需要在程式碼中先通過session_start()函式來初始化Session。

設置Session生命週期
一般來說,瀏覽器結束訪問離開網站時其生命週期也同時結束,但是儲存Session資訊的文件仍然存在於Session儲存資料夾中,下次再重新打開瀏覽器連接該網站會重新分配Session ID,如果我們使用session_id()把以前的ID帶回來,則會去讀取殘存在Session儲存資料夾中的相應文件,取回先前所有已經設定的Session變數。

註冊Session
透過session_start()初始化Session後,我們就可以使用session_register()函式來註冊一個新的Session變數使用。
函式語法:boolean session_register(string name)
本函式增加一個新的變數到目前的Session之中,參數name就是新的Session變數名。成功註冊後則傳回true值。Session變數註冊成功後,即可通過$_SESSION[name]的方式呼叫此變數來使用。如果想確認某個名稱的Session變數是否已經被註冊,可以使用session_is_registered()函式來判斷。

刪除Session
與session_register()函式對應,session_unregister()函式可以刪除一個已註冊Session變數。
函式語法:boolean session_unregister(string name)
本函式在當前的Session中刪除參數name指定的Session變數。刪除成功則傳回true值。如果客戶要結束一個網站的連結,我們需要在伺服器中結束此用戶的Session,使用session_destroy()函式來關閉Session環境。

沒有留言:

張貼留言