來源:互聯網
上載者:User
關鍵字
使用
會話
變數
一個
count
使用者
註冊
如果
PH
一個被大家長期所期待的PHP 4.0特性是會話支援。相比之下,PHP 3.0使用者則不得不使用第三方庫或根本不能實現此項功能。而缺乏會話支援則正是PHP最受人批評的地方。不過,從早期測試版的發布開始,會話支援就成為PHP 4.0的一部分,因此這個問題也得到了消除。
你可以通過會話以在使用者訪問網路站台期間維持使用者特定變數,而無須設定多個cookie、使用隱蔽表單域,或在你可能經常要連結的一個資料庫記憶體儲資訊等。
在一個頁面上啟動會話即告之PHP引擎要麼是要開始一個會話(如果之前沒有啟動)或是繼續當前會話:
session_start();
啟動一個會話將通過cookie向使用者發送一個認證字串(如940f8b05a40d5119c030c9c7745aead9);而在伺服器端則會建立一個同名的相映臨時檔案,如sess_940f8b05a40d5119c030c9c7745aead9。此檔案包含了註冊會話變數及其值。
顯示會話動作最常見的例子是訪問計數器:
啟動你的PHP模組,並完全確保PHP代碼是檔案的第一行:無空白、無HTML輸出等任何代碼。原因是會話函數發出一個檔案頭時,如在調用session_start()函數之前發送了空白或者HTML輸出,系統將會出錯。
//如果會話對使用者並不存在,啟動一新會話
session_start();
接下來,註冊count變數。
session_register('count');
註冊變數即告之PHP:只要在會話存在時,一個名叫count的變數也就存在。目前此變數還沒有賦值。不過,如果你對其加1,則值即可被賦為1:
$count++;
把以上各點一併考慮,你已經完成以下工作:啟動了一個會話(如果先前沒有)、為某個使用者指派了會話標識(如果不存在會話標識)、註冊了名為count的變數並把$count加1以表示此次為使用者首次訪問頁面:
要顯示使用者在當前會話中已經訪問頁面次數,只需要輸出$count的值:
echo "
You've been here $count times.
";
整個訪問計數器代碼如下:
session_start();
session_register('count');
$count++;
echo "
You've been here $count times.
";
?>
如果重新裝載以上指令碼,可以發現計數值增加。這的確令人激動。
同時可以在會話中註冊數組。假設你已經有一個名為$faves的數組:
$faves = array ('chocolate','coffee','beer','linux');
可以象其他單個變數一樣註冊該數組:
session_register('faves');
應用數組同應用其他單獨變數相同,如$faves。如果使用者希望在Web網站的一個頁面上現場展示其愛好,則可以在名為$faves會話變數中註冊使用者愛好,並在另一頁面輸出這些值:
session_start();
echo "My user likes:
";
while (list(,$v) = each ($faves)) {
echo "
- $v"; }
echo "
";
?>
這樣即可得到一個顯示使用者愛好的美觀簡潔的列表。
會話變數值不能被查詢字串所覆蓋,也就是說,不能通過鍵入http:///www.yourdomain.com/yourscript.php?count=56 來為註冊會話變數$count賦予新值。這一點對安全而言是至關重要:你只能在伺服器端通過指令碼修改或者刪除(未註冊的)會話變數。
如果希望完全刪除某個會話變數,應從系統中取消註冊該變數:
session_unregister('count');
要完全刪除某會話,如按下Logout按鈕,則下列指令碼比較簡潔:
session_destroy();
使用會話來儲存變數值減輕了資料庫連接負載,並避免了噩夢般複雜代碼的編寫,以及用大量隱私權聲明以解釋為何在訪問過程中向使用者發送多達50份cookie。而現在僅僅需要一個cookie、一個變數就可以了——如同一顆水珠折射出整個世界——沒有比這更簡單的了!