使用原會話

來源:互聯網
上載者:User
一個被大家長期所期待的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 "<P>You've been here $count times.</p>";

整個訪問計數器代碼如下:

<?

session_start();

session_register('count');

$count++;

echo "<P>You've been here $count times.</p>";

?>

如果重新裝載以上指令碼,可以發現計數值增加。這的確令人激動。

同時可以在會話中註冊數組。假設你已經有一個名為$faves的數組:

$faves = array ('chocolate','coffee','beer','linux');

可以象其他單個變數一樣註冊該數組:

session_register('faves');

應用數組同應用其他單獨變數相同,如$faves。如果使用者希望在Web網站的一個頁面上現場展示其愛好,則可以在名為$faves會話變數中註冊使用者愛好,並在另一頁面輸出這些值:

<?

session_start();

echo "My user likes:

<ul>";

while (list(,$v) = each ($faves)) {

echo "<li>$v"; }

echo "</ul>";

?>

這樣即可得到一個顯示使用者愛好的美觀簡潔的列表。

會話變數值不能被查詢字串所覆蓋,也就是說,不能通過鍵入http:///www.yourdomain.com/yourscript.php?count=56 來為註冊會話變數$count賦予新值。這一點對安全而言是至關重要:你只能在伺服器端通過指令碼修改或者刪除(未註冊的)會話變數。

如果希望完全刪除某個會話變數,應從系統中取消註冊該變數:

session_unregister('count');

要完全刪除某會話,如按下Logout按鈕,則下列指令碼比較簡潔:

session_destroy();

使用會話來儲存變數值減輕了資料庫連接負載,並避免了噩夢般複雜代碼的編寫,以及用大量隱私權聲明以解釋為何在訪問過程中向使用者發送多達50份cookie。而現在僅僅需要一個cookie、一個變數就可以了——如同一顆水珠折射出整個世界——沒有比這更簡單的了!



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。