一個被大傢長期所期待的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 "
Youve been here $count times.
"; 整個訪問計數器代碼如下: <? session_start(); session_register(count); $count++; echo "
Youve 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 "
"; ?> 這樣即可得到一個顯示用戶愛好的美觀簡潔的列表。 會話變量值不能被查詢字符串所覆蓋,也就是說,不能通過鍵入https:///www.yourdomain.com/yourscript.php?count=56 來為註冊會話變量$count賦予新值。這一點對安全而言是至關重要:你隻能在服務器端通過腳本修改或者刪除(未註冊的)會話變量。 如果希望完全刪除某個會話變量,應從系統中取消註冊該變量: session_unregister(count); 要完全刪除某會話,如按下Logout按鈕,則下列腳本比較簡潔: session_destroy(); 使用會話來存儲變量值減輕瞭數據庫連接負載,並避免瞭噩夢般復雜代碼的編寫,以及用大量隱私聲明以解釋為何在訪問過程中向用戶發送多達50份cookie。而現在僅僅需要一個cookie、一個變量就可以瞭——如同一顆水珠折射出整個世界——沒有比這更簡單的瞭!