明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

長沙發(fā)上的對話(4)

[摘要]有很多給貓換膚的辦法...   當(dāng)然,如果你的站點(diǎn)仍然運(yùn)行著PHP3,你就無法使用迄今為止的任何代碼。但是不要沮喪 -- 有另一種提供給PHP3用戶的解決辦法。它就叫做PHPLIB,它提供了一組有用的類,允許在你的PHP3中增加對session的管理?梢园凑瞻械闹甘具M(jìn)行安裝,你還需要修改&qu...
有很多給貓換膚的辦法...

  當(dāng)然,如果你的站點(diǎn)仍然運(yùn)行著PHP3,你就無法使用迄今為止的任何代碼。但是不要沮喪 -- 有另一種提供給PHP3用戶的解決辦法。它就叫做PHPLIB,它提供了一組有用的類,允許在你的PHP3中增加對session的管理?梢园凑瞻械闹甘具M(jìn)行安裝,你還需要修改"local.inc"配置文件來創(chuàng)建你自已的類。
  象在PHP4中一樣,在每次你初始化一個session時,你需要預(yù)先調(diào)用page_open()函數(shù)。PHPLIB返回一個缺省的名為Example_Session的類 -- 你可以在"local.inc"文件中修改這個值 -- 它將用在下面的例子中:


$#@60;?php

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

?$#@62;

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

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

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

?$#@62;

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

$#@60;?php

page_close();

?$#@62;

  除了這些,大部分的代碼都是一樣的?匆幌乱郧袄拥腜HPLIB版本:

$#@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");

//選擇數(shù)據(jù)庫 mysql_select_db("stock_db",$db);

//使用SQL查詢數(shù)據(jù)庫
$query = "select stock_pref1,stock_pref2,stock_pref3,stock_pref4
from user_info where username=$username";

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

// 從數(shù)據(jù)庫中取股票代碼,并賦值給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;";

//生成頁面其余代碼

//將數(shù)據(jù)保存到數(shù)據(jù)庫中

page_close();
?$#@62;

  如你所見,一旦你放下PHP4版本,理解PHPLIB版并不因難 -- 當(dāng)你知道了PHP4中的對session的內(nèi)部支持很大程度上基于PHPLIB模塊你就不會感到奇怪了。如果你感興趣,PHPLIB實(shí)際上在對session的管理中,對身份認(rèn)證和權(quán)限的類更加深入,它允許你在基于數(shù)據(jù)庫的認(rèn)證管理上,給一個用戶允許或禁止處理的權(quán)力 -- 可以看一下文檔中關(guān)于如何使用這些特性的例子。

  PHPLIB也提供一些有趣的內(nèi)建函數(shù)。

unregister(variable)


[page_break]  允許你從一個特別的session中注銷一個變量。注意在那種情況下,變量并沒有被刪除,可是它的值將會在頁尾丟失,因?yàn)樗辉俦槐4娴綌?shù)據(jù)庫中。

$#@60;?php

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

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

//檢查是否它已經(jīng)被注冊了
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);

//檢查是否已經(jīng)被注銷 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已經(jīng)被注冊了,返回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() 釋放當(dāng)前的session。

  要注意地有趣的一點(diǎn)是:在PHPLIB的cookie模式中,有可能在調(diào)用過delete()之后開始一個新的session,在客戶端設(shè)置一個新的cookie,甚至重新注冊一些以前session的變量 -- 可以從根本上使改變session象飛一樣。當(dāng)然,你象這樣做事情,你需要讓你的生活...快起來!

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

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

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

病人離開醫(yī)院

病人: 哇哦,醫(yī)生 -- 太好了!非常感謝你做的一切!

心理醫(yī)生: 沒問題,維克多。我很樂意幫助你,F(xiàn)在感覺好點(diǎn)嗎?

病人: 噢,輕松!當(dāng)我剛進(jìn)來時,整個天看上去都是灰色和陰沉的 -- 現(xiàn)在,這個雨蓬窗戶外面的景色從來沒有那么好過...

心理醫(yī)生: 恩...維克多...如果我是你在外面會很小心,扶手有一點(diǎn)壞了,在那可能不太安全。

病人: 別擔(dān)心,醫(yī)生 -- 象這樣的天,我感到神...圣...啊。。。。