发信人: chujian1()
整理人: sltongyong(2000-10-16 22:43:08), 站内信件
|
Session 一直是 PHP 擁護者心中的遺憾,在 PHP 還沒支援 Session 之前,各方 的 PHP Session 解決方案一直出現。直到 PHP4 終於將 Session 納入它的標準 功能。從此 PHP 在 Session 上終於可以抬得起頭了。
Session 中文實在是很難形容,一般都譯成時域。其實是在瀏覽某個網站時,在 瀏覽器沒有關閉的情形之下,都保持在同一個 Session 下。因此,利用 Sessio n 的特性,可以計算使用者從進站到現在所瀏覽的頁數,也可以在伺服器端記載 使用一些資訊,避免這些資訊傳到使用者端。
說得更白話一些,例如電子商務網站中 B to C 的網站 (商家對客戶),常會有手 推車的功能 (Cart)。此時,將手推車的資訊留在伺服器端,不但可以記錄使用者 採買的資料,也不會讓這些相關資訊在網路上被截收,甚至以假亂真。
PHP4 產生的 Session 數字,是利用 Hash 雜湊所產生的 32 位元組的文字或數 字。因為產生時,時間也是它的種子,因此這個 Session 數字在該網站具有獨一 無二的特性。
欲使用 Session 的功能,首先要準備 PHP4 的版本,若使用 PHP3 及之前的版本 ,只好在網路上找其它的解決方案了。由於 Session 牽涉到值的傳遞,因此,在 編譯 PHP4 時,在加上 --enable-trans-sid 的參數,也就是允許 SessionID 的 參數在不同的網頁之中傳遞。
PHP4 在運作時,不會主動產生 Session 的值,除非呼叫了 Session 的函式: s ession_start()。告訴 Web 伺服器後端,也就是 PHP4 的程式,啟動 Session 的功能。此時,PHP4 即產生唯一的 Session 代碼,並依在 php.ini 中所設定 session.save_path 的值 (內定為 /tmp),將這個代碼寫入檔案中,檔案的名稱 類似 sess_a5aa4678de539d45cf5e2e3309751f6a。
由於此時 Session 已經啟動了,因此可以將變數寫到 Session 中,讓這些變數 可以在不同的 Homepage 中傳遞。Session 函式 session_register() 就是負責 這樣的工作。例如下例 1.php 的 $abc 參數可以讓 2.php 直接使用:
<?php
// 檔名 1.php
session_start();
$abc="ABCDEFG";
$zzz="zzzzzzz";
session_register("abc");
session_register("zzz");
echo "1.php";
?>
<?php
// 檔名 2.php
session_start();
echo "2.php\n";
if (isset($abc)) {
echo $abc;
echo $zzz;
} else {
echo "變數沒傳進來";
}
?>
範例中的 Session 存在 /tmp/sess_33e401e2bf67a2f73b64d48b2aae6c4d,其內 容類似:
abc|s:7:"ABCDEFG";zzz|s:7:"zzzzzzz";
可以看到,向 Session 註冊的變數,以 ; 分開。而變數的名稱及變數值,都記 錄在其中。有了 Session 之後,網頁不再是各自獨立的程式,而是整個網站就像 一套整合的應用程式。
Session 對網站間的數值傳遞而言是很方便,不過它和瀏覽器的 Cookie 有關, 若使用者將 Cookie 關掉,就會法預期它的結果了。
實際的使用時,請注意變數的名稱,不要和別的變數沖到,那就很難找出問題的 原因。而變數可以有很多個,反正都是記在 /tmp/sess_xxxxxxxxxx... 之中,不 過不要太濫用 Session 而讓程式變得過於複雜,日後就很難維護了。
Session 的函式當然不只上述的二個,其它有關 Session 的函式,可以參考筆者 的書 PHP BIBLE 中有關 Session 的章節。
---------------------------------------------------------------------- ----------
-- OICQ:126326
虚拟社区:http://chujian.3322.net
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: ]
|
|