會話用法
php 4.0有乙個一直為人所期待的特性,這就是php的會話(session)支援。相比之下,php 3.0的使用者則不得不使用第三方的程式庫或完全不能具備這項功能。缺乏會話支援能力是php最大的缺陷之一,也是它最受人指摘的地方。不過,隨著會話支援從早期測試版本的php 4.0開始就成為後者的一部分,這個障礙也蕩然無存了。
有了會話支援,你就可以在使用者訪問網路站點期間維持使用者特定的變數而無須象現在這樣:設定多個cookie、使用隱蔽表單域或在你可能經常要鏈結的乙個資料庫內儲存資訊等。
在乙個頁面上啟動會話就是告訴php引擎:你或是要開始乙個會話(如果先前沒有)或是繼續目前的會話:
session_start();
啟動乙個會話將通過cookie向使用者傳送乙個標識字串(比如940f8b05a40d5119c030c9c7745aead9);在伺服器端則會建立乙個與此相匹配程式設計客棧的臨時檔案,在以上例子中,其名稱則是這個樣子:sess_940f8b05a40d5119c030c9c7745aead9。該檔案包含了註冊的會話變數及其賦值。
使用者訪問計數器可謂使用會話的最常見例項:
啟動你的php模組,保證php**是檔案的第一行:沒有空白、沒有html輸出等等。這是因為,當會話函式發出乙個檔案頭的時候,如果你在session_start()函式之前傳送了空白或者html**,系統即會報錯。
// if a session does not yet exist for this user, stukdmfsrkart one
se程式設計客棧ssion_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 bukdmfsrkeen here $count times.
"; ?>
如果你過載以上指令碼,你可以觀察到計數值增加了。有意思吧?
你還可以在會話中註冊陣列。假設你有乙個名為$f**es的陣列:
$f**es = array ('chocolate','coffee','beer','linux');
你可以象其他單個變數一樣註冊該陣列:
session_register('f**es');
索引陣列和索引其他單變數沒有什麼差程式設計客棧別,比如$f**es這樣。如果你的使用者想在web站點的乙個頁面上展示自己的愛好,那麼你完全可以把他喜歡的東西註冊為乙個名為$f**es會話變數,然後你可以在其他頁面上把這些值列印出來:
session_start();
echo "my user likes:
"; while (list(,$v) = each ($f**es)) {
echo "";
?>
這就是你要得到的:使用者愛好的漂亮列表。
會話變數不能被查詢字串所覆蓋,這就是說,你不能鍵入http:/ 這樣的指令為註冊會話變數$count分配新值。這一點對安全而言是非常重要的:你只能在伺服器端指令碼上修改或者刪除(未註冊的)會話變數。
如果你想完全刪除某個會話變數,你可以從系統中取消註冊該變數:
session_unregister('count');
徹底刪除某個會話,比如按下logout按鈕就是這樣的例子,那麼你可以寫下如下的**:
session_destroy();
使用會話來儲存變數值可以讓我們免於編寫資料庫處理**的痛苦,這樣也就不會過度增加對系統的負載,同時也減少了對專有資料庫語法的使用範圍,再說,你也不再非得向訪問站點的使用者傳送一大堆cookie了。而現在呢——只需要乙個cookie、乙個變數就全部搞定了,真是一滴水就映出了全部光輝!實在是不能比這更簡單的了。
本文標題: php指令碼的10個技巧(2)
本文位址:
PHP指令碼的10個技巧 5
採用php 做為現在的主流開發語言 的使用者認證 如果你希望在每乙個指令碼的基礎上實現口令保護功能,那麼你可以聯合使用header 函式和 php 做為現在的主流開發語言 auth user php 做為現在的主流開發語言 auth pw全域性變數來創造乙個基本的認證方案。通常的 基於伺服器的認證請...
PHP指令碼的10個技巧 6
php和com 如果你是一名冒險份子,而且你正在使用cgi isapi或apache模組版本的windows系統上執行著php,那麼你也可以獲得系統的com功能。現在,解釋com 微軟的元件物件模型 的工作留給了微軟和那些大部頭的圖書來完成。然而,知道點com也沒什麼錯,下面有乙個普通的 沒有雙關語...
php 面試技巧 10個值得深思的PHP面試題
文章所羅列的問題雖然看似簡單,但是每個背後都涵蓋了乙個或幾個大家容易忽視的基礎知識點,希望能夠幫助到你的面試和平時工作。第乙個問題關於弱型別 str1 yabadabadoo str2 yaba if strpos str1,str2 else else null null 執行的時候你或許還能看到...