有很多給貓換膚的辦法...
當然,如果你的站點仍然運行著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 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