會話用法
PHP 4.0有一個一直為人所期待的特性,這就是PHP的會話(session)支援。相較之下,PHP 3.0的使用者則必須使用第三方的程式庫或完全無法具備這項功能。缺乏會話支援能力是PHP最大的缺陷之一,也是它最受人指摘的地方。不過,隨著會話支援從早期測試版本的PHP 4.0開始就成為後者的一部分,這個障礙也蕩然無存了。
有了會話支持,你就可以在用戶訪問網站期間維持用戶特定的變數而無須象現在這樣:設定多個cookie、使用隱藏表單域或在你可能經常要連結的一個資料庫內儲存資訊等。
在一個頁面上啟動會話就是告訴PHP引擎:你或是要開始一個會話(如果先前沒有)或是繼續目前的會話:
session_start();
啟動一個會話將透過cookie向使用者發送一個識別字串(例如940f8b05a40d5119c030c9c7745aead9);在伺服器端則會建立一個與此相符的臨時文件,在上述範例中,其名稱則是這個樣子:sess_940f8b05aceaddc75aceadc該文件包含了註冊的會話變數及其賦值。
使用者存取計數器可謂使用會話的最常見實例:
啟動你的PHP模組,確保PHP程式碼是檔案的第一行:沒有空白、沒有HTML輸出等等。這是因為,當會話函數發出一個檔案頭的時候,如果你在session_start()函數之前發送了空白或HTML程式碼,系統即會報錯。
// if a session does not yet exist for this user, start one
session_start();
接下來,註冊一個名為count的變數。
session_register('count');
註冊變數就等於告訴了PHP:只要會話存在,一個名叫count的變數也就同時存在。目前這個變數還沒有賦值。不過,如果你對它進行加1運算的話,該值即可被賦值為1:
$count ;
把以上各行程式碼一起考慮,實際上你已經啟動了一個會話(如果先前沒有)、為某個用戶分配了會話id、註冊了名為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();
使用會話來儲存變數值可以讓我們免於編寫資料庫處理程式碼的痛苦,這樣也就不會過度增加對系統的負載,同時也減少了對專有資料庫語法的使用範圍,再說,你也不再非得向造訪網站的使用者發送一大堆cookie了。而現在呢──只需要一個cookie、一個變數就全部搞定了,真是一滴水就映出了全部光輝!實在是不能比這更簡單的了。
http://www.bkjia.com/PHPjc/315948.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/315948.htmlTechArticle會話用法PHP 4.0有一個一直為人所期待的特性,這就是PHP的會話(session)支持。相較之下,PHP 3.0的使用者則必須使用第三方的程式庫或完全...