PHP使用者狀態管理功能的應用

使用者狀態管理(session support)是 php(做為現在的主流開發語言) 4.0 一個讓大傢期待已久的新功能。在 php(做為現在的主流開發語言) 3.0 的時代,程序設計員必須使用其它人寫好的函式庫來實作狀態管理功能,或者就幹脆放棄這項功能不用算瞭。而狀態管理功能的缺乏事實上是 php(做為現在的主流開發語言) 3.0 最讓人感到失望的地方之一。不過現在狀況已經得到改變,從 php(做為現在的主流開發語言) 4.0 的早期測試版開始,使用者狀態管理便已經成為 php(做為現在的主流開發語言) 內建的功能之一瞭。

你可以使用狀態管理功能來管理使用者從進入網站開始一直到離開網站為止這段期間內的所有相關變量(隻要使用者沒有離開網站,那麼這些變量就都可以取用,不會因為使用者離開某個單一頁面而造成資料消失),而不需要儲存許多cookie 或者使用隱藏窗體字段,甚至將這些變量儲存在數據庫裡面,造成數據庫服務器的大量負荷。

一旦你在網站中的某一頁激活狀態管理,php(做為現在的主流開發語言) 引擎便會開始紀錄使用者狀態(如果對這個使用者來說系統還沒開始紀錄該訪問者的狀態的話),或者繼續紀錄某個先前已經激活的使用者狀態。要激活 php(做為現在的主流開發語言) 的狀態管理功能,你可以使用下面這個語法:

session_start();  

一旦激活狀態管理,php(做為現在的主流開發語言) 會通過 cookie 傳送一個獨一無二的狀態代碼(這個代碼看起來會像是:940f8b05a40d5119c030c9c7745aead9)給使用者,同時在服務器這端,php(做為現在的主流開發語言) 引擎會自動產生一個檔名與狀態代碼相對應的暫存文本文件(如:sess_940f8b05a40d5119c030c9c7745aead9),該檔案會用來儲存程序設計員在這個使用者狀態紀錄中所註冊的所有變量。

談到使用者狀態管理,最常使用的例子便是一個頁面存取計數器(access(小型網站之最愛) counter)瞭:現在我就開始教大傢撰寫 php(做為現在的主流開發語言) 程序代碼。

特別註意

在你嘗試激活使用者狀態紀錄之前,千萬不能夠輸出任何內容(不能有空格,TAB 甚至換行等等空格符,也不能有任何 HTML 卷標,任何內容都不行)給瀏覽器。這是因為狀態管理相關函數會送出 HTTP 表頭(header)信息給瀏覽器,如果在送出 HTTP 表頭信息給瀏覽器之前已經有其它內容被輸出的話,系統將會出現錯誤訊息。

如果該使用者的狀態管理尚未被激活的話,下面這行程序便會激活該使用者的狀態管理:

session_start();  

接下來,註冊一個名為count的變量:

session_register(count);  

一旦你註冊瞭一個變量,php(做為現在的主流開發語言) 便會在從使用者進入網站一直到離開網站的整個瀏覽過程中自動替你維護這個變量的值,你可以隨時取用這些註冊過的變量。剛註冊好的變量並沒有指定任何值給它,不過一旦我們增加 count 變量的值,它的值便會是 1 瞭:

$count++;  

把這些程序代碼組合起來,我們的程序代碼就會做下面這些事情瞭:激活使用者狀態紀錄功能(如果對該使用者而言尚未激活的話),指定一個獨一無二的狀態代碼(session id)給該使用者,註冊一個名為 count 的變量,並且在每次使用者瀏覽到該頁面的時候,將變量 $count 的值加一,這個值就可以用來記錄該使用者瀏覽過該頁面的次數瞭。

如果要將使用者這次的瀏覽歷程中觀看瞭該頁面多少次,我們隻需要將變量$count 的值列印出來就行瞭:

echo “<P>您已經瀏覽這個頁面$count 次瞭。</p>”;  

完整的頁面瀏覽計數器程序代碼看起來就像這樣:

<?session_start();
session_register(count);
$count++;
echo “<P>您已經瀏覽這個頁面 $count 次瞭。</p>”;
?>


如果你不斷重新加載這個頁面,你會發現畫面上顯示的瀏覽次數會不斷的增加。除瞭註冊單純的變量以外,我們也可以註冊一個數組(array)到使用者狀態紀錄中。假設我們有下面這個名為 $faves 的數組:

$faves = array (古典音樂,旅遊,唱歌,Linux);  

註冊數組的做法和註冊其它單純變量是完全一樣的:

session_register(faves);  

註冊完成數組以後,在往後的程序代碼裡面要參照到該數組的做法也沒有任何不同,隻要單純地叫用 $faves 這個變量就行瞭。假設你的使用者在網站中某個頁面窗體裡頭選擇瞭一些他所喜歡的東西,而且你將這些項目通過 $faves 數組註冊到該使用者的狀態紀錄裡面,那麼在網站中其它頁面你可以很容易地把這些項目顯示在畫面上:

<?
session_start();
echo “我的訪客喜歡的東西是:<ul>”;

發佈留言