長沙發上的對話(四)

有很多給貓換膚的辦法…

  當然,如果你的站點仍然運行著PHP3,你就無法使用迄今為止的任何代碼。但是不要沮喪 — 有另一種提供給PHP3用戶的解決辦法。它就叫做PHPLIB,它提供瞭一組有用的類,允許在你的PHP3中增加對session的管理。可以按照包中的指示進行安裝,你還需要修改”local.inc”配置文件來創建你自已的類。
  象在PHP4中一樣,在每次你初始化一個session時,你需要預先調用page_open()函數。PHPLIB返回一個缺省的名為Example_Session的類 — 你可以在”local.inc”文件中修改這個值 — 它將用在下面的例子中:


$#@60;?php

page_open(array(“sess” =$#@62; “Example_Session”));

?$#@62;

  在任何發給瀏覽器的輸出之前調用page_open()非常重要。為瞭註冊你的session變量,下面的語句可以完成這個工作。
$#@60;?php

//初始化一個session page_open(array(“sess” =$#@62; “Example_Session”));

//註冊一個session變量 $sess-$#@62;register(username);

?$#@62;

  每一個頁面也必須包含相應的page_close()函數,用來確認所以的改變量被保存在數據庫中。

$#@60;?php

page_close();

?$#@62;

  除瞭這些,大部分的代碼都是一樣的。看一下以前例子的PHPLIB版本:

$#@60;?php


//初始化一個session page_open(array(“sess” =$#@62; “Custom_Session”));

//註冊session變量 – 註意語法
$sess-$#@62;register(username);
$sess-$#@62;register(stock1);
$sess-$#@62;register(stock2);
$sess-$#@62;register(stock3);
$sess-$#@62;register(stock4);

//連接MySQL $db = mysql_connect(“someserver.com”, “tom”, “jones”);

//選擇數據庫 mysql_select_db(“stock_db”,$db);

//使用SQL查詢數據庫
$query = “select stock_pref1,stock_pref2,stock_pref3,stock_pref4
from user_info where username=$username”;

$result = mysql_query($query,$db);

// 從數據庫中取股票代碼,並賦值給session變量
list($stock1,$stock2,$stock3,$stock4) = mysql_fetch_row($result);

//輸出
echo “Hi $usernam #@60;br$#@62;”;
echo “Your selected stocks are:$#@60;br$#@62;”;
echo “$stock1$#@60;br$#@62;”;
echo “$stock2$#@60;br$#@62;”;
echo “$stock3$#@60;br$#@62;”;
echo “$stock4$#@60;br$#@62;”;

//生成頁面其餘代碼

//將數據保存到數據庫中

page_close();
?$#@62;

  如你所見,一旦你放下PHP4版本,理解PHPLIB版並不因難 — 當你知道瞭PHP4中的對session的內部支持很大程度上基於PHPLIB模塊你就不會感到奇怪瞭。如果你感興趣,PHPLIB實際上在對session的管理中,對身份認證和權限的類更加深入,它允許你在基於數據庫的認證管理上,給一個用戶允許或禁止處理的權力 — 可以看一下文檔中關於如何使用這些特性的例子。

  PHPLIB也提供一些有趣的內建函數。

unregister(variable)

本新聞共2頁,當前在第1頁  1  asp”>2  

  允許你從一個特別的session中註銷一個變量。註意在那種情況下,變量並沒有被刪除,可是它的值將會在頁尾丟失,因為它不再被保存到數據庫中。

$#@60;?php

page_open(array(“sess” =$#@62; “Example_Session”));

//註冊一個變量 $sess-$#@62;register(username);

//檢查是否它已經被註冊瞭
if($sess-$#@62;is_registered(username))
{
echo “Variable “username” is registered!$#@60;br$#@62;”;
}
else
{
echo “Variable “username” is unregistered!$#@60;br$#@62;”;
}

//註銷一個變量 $sess-$#@62;unregister(username);

//檢查是否已經被註銷 if($sess-$#@62;is_registered(username))
{
echo “Variable “username” is registered!$#@60;br$#@62;”;
}
else
{
echo “Variable “username” is unregistered!$#@60;br$#@62;”;
}

page_close();

?$#@62;

is_registered(variable) 如果在一個session已經被註冊瞭,返回true,否則返回false。

$#@60;?php

page_open(array(“sess” =$#@62; “Example_Session”));

if($sess-$#@62;is_registered(username))
{
echo “A session variable by the name “username” already
exists”;
}
else
{
$sess-$#@62;register(username);
}

page_close();

?$#@62;

delete() 釋放當前的session。

  要註意地有趣的一點是:在PHPLIB的cookie模式中,有可能在調用過delete()之後開始一個新的session,在客戶端設置一個新的cookie,甚至重新註冊一些以前session的變量 — 可以從根本上使改變session象飛一樣。當然,你象這樣做事情,你需要讓你的生活…快起來!

url($url) 充許你將用戶重定向到一個新的頁面。

self_url() 返回一個當前頁的URL的引用,包括PHP_SELF和QUERY_STRING信息。

  那麼在最後,對那些不幸擁有一個不提供PHP4和PHPLIB的ISP的你來說 — 記住,通過好的cookie 技術總是可能模擬出session來的。你所要做的隻是設置一個帶有信息的cookie ,用來長期保留用戶對你的站點的訪問過程,每次在用戶訪問一個新頁面的時候處理這個信息。很原始 — 但是它可以工作,而且有時你也不能將能夠做成一件事的簡單方法打死!

病人離開醫院

病人: 哇哦,醫生 — 太好瞭!非常感謝你做的一切!

心理醫生: 沒問題,維克多。我很樂意幫助你。現在感覺好點嗎?

病人: 噢,輕松!當我剛進來時,整個天看上去都是灰色和陰沉的 — 現在,這個雨蓬窗戶外面的景色從來沒有那麼好過…

心理醫生: 恩…維克多…如果我是你在外面會很小心,扶手有一點壞瞭,在那可能不太安全。

病人: 別擔心,醫生 — 象這樣的天,我感到神…聖…啊啊!!!!

本新聞共2頁,當前在第2頁  1  2  

You May Also Like