php中的session可以預設情況下是使用用戶端的cookie(以便和普通意義上的cookie區別,我稱之為session cookie,普通意義上的cookie為cookie)來儲存session id的,但是php中的session是否只能使用session cookie呢?
當然不是,否則何必還弄個session出來,不如直接用cookie算了.session的一大優點就是當用戶端的cookie被禁用時會自動把session id附在url中,這樣再通過session id就能記住session變數了.
下面我寫兩個檔案來證實一下,首先在瀏覽器中設定禁用cookie.
[php]
//檔案名稱為test1.php
session_start();
session_register("url");
$url="test2.php";
echo "goto test2.php";
?>
//檔案名稱為test1.php
session_start();
session_register("url");
$url="test2.php";
echo "goto test2.php";
?> [php]
session_start();
if (session_is_registered("url")) {
echo "congratulations.";
$url="test1.php";
echo "goto test1.php";
} else
echo "failed.";
?>
session_start();
if (session_is_registered("url")) {
echo "congratulations.";
$url="test1.php";
echo "goto test1.php";
} else
echo "failed.";
?>
現在在瀏覽器中輸入"http://localhost/test1.php",把滑鼠移到連結上看看狀態列上的地址,不是簡單的"http://localhost/test2.php",而是這種形式:"http://localhost/test2.php?phpsessid=6e3610749f7ded3784bc4a4dd10f879b".
你還可以查看html的源檔案,源檔案是這種形式:
goto test2.php
所以說這完全是php的功勞,和瀏覽器無關,也就是說無論你用什麼瀏覽器session都有效,而不是有的人認為的只對ie有用.
但是,我們的超連結是語句是由echo語句輸出的,如果超連結不包含在php的標籤之內會怎樣呢?還是寫個例子來驗證一下,把test1.php稍作修改:
[html]
session_start();
session_register("url");
$url="test2.php";
echo "goto test2.php";?>
(html形式)goto test2.php
session_start();
session_register("url");
$url="test2.php";
echo "goto test2.php";?>
(html形式)goto test2.php
在瀏覽器中輸入"http://localhost/test1.php",分別把滑鼠移到兩個連結上看看有沒有不同?可以看到,兩個連結是完全相同的,後面都會自動附帶session id.所以不必擔心沒被包含在php標籤中的連結會失效,php不會這麼笨的.
但是在使用時要注意必須先用session_start()函數告訴php開始用session,哪怕你在這個檔案中只有html代碼,如:
gogogo
…………
記得有人說過這個優點只能在linux/unix下才能發揮出來,而我用的win2000p+apache1.3.17+php4.0.4pl1,php為apache模組方式,卻照樣可以.恰恰相反,我轉到linux下去測試時反而不行了.其實是在編譯時間的一個選項--enable-trans-sid控制了這項功能能否有用.而按照php預設來編譯時間是沒有開啟這項功能的,只需重新編譯時間加入它就可以了.我的配置為apache1.3.17+php4.0.4pl1,php為apache模組方式,在linux重新編譯後用netscape navigator4.7測試可以通過(這更證明了和瀏覽器無關).
只靠session是不能跨視窗使用的,即使你啟用了cookie,當你在一個視窗中有一個合法的session id(記錄在session cookie中,不是url中),再新開一個視窗進入相同頁面時,你會重新擁有一個新的session id,而與前一個視窗互不影響.
要想跨視窗使用同一個session id就只能在url後指定session id,也就是說如果你把帶有session id的的視窗的url複製,在新開的視窗中粘貼一下,還是照樣使用的.知道了session id的這個原理要實現跨視窗session還是不難的,可以把cookie與session結合起來,首先取得當前合法的session id,然後把它記錄在cookie中,在其它視窗讀取cookie就可獲得當前的session id了.
http://www.bkjia.com/PHPjc/477502.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477502.htmlTechArticlephp中的session可以預設情況下是使用用戶端的cookie(以便和普通意義上的cookie區別,我稱之為session cookie,普通意義上的cookie為cookie)來儲存sessi...