六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

Session是否必須依賴Cookie

[摘要]Session是否必須依賴Cookie?www.ouryh.net銀河技術在線║整理時間:2001-8-7║作者: 不詳 ║來源: 不詳 ║閱讀:36 PHP中的session可以默認情況下是使用客戶端的Cookie(以便和普通意義上的Cookie區別,我稱之為session cookie,普通...
Session是否必須依賴Cookie?

www.ouryh.net銀河技術在線║整理時間:2001-8-7║作者: 不詳 ║來源: 不詳 ║閱讀:36


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.
<? //文件名為test1.php
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>
";
?>

<?//文件名為test2.php
session_start();
if (session_is_registered("url")) {
echo "Congratulations.
";
$url="test1.php";
echo "<a href=$url>goto test1.php</a>
";
}
else echo "Failed.
";
?>
現在在瀏覽器中輸入"http://localhost/test1.php",把鼠標移到鏈接上看看狀態欄上的地址,不是簡單的"http://localhost/test2.php",而是這種形式:"http://localhost/test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b".你還可以查看Html的源文件,源文件是這種形式:
<a href="test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b">goto test2.php</a>
所以說這完全是PHP的功勞,和瀏覽器無關,也就是說無論你用什么瀏覽器session都有效,而不是有的人認為的只對IE有用.
但是,我們的超鏈接是語句是由echo語句輸出的,如果超鏈接不包含在PHP的標簽<? ?>之內會怎樣呢?還是寫個例子來驗證一下,把test1.php稍作修改:
<?
session_start();
session_register("url");
$url="test2.php";
echo "<a href=$url>goto test2.php</a>
";

?>
<a href="test2.php">(Html形式)goto test2.php</a>
在瀏覽器中輸入"http://localhost/test1.php",分別把鼠標移到兩個鏈接上看看有沒有不同?可以看到,兩個鏈接是完全相同的,后面都會自動附帶session id.所以不必擔心沒被包含在PHP標簽中的鏈接會失效,PHP不會這么笨的.
但是在使用時要注意必須先用session_start()函數告訴PHP開始用session,哪怕你在這個文件中只有html代碼,如:
<? session_start();?>
<html>
<head>
<body>
<a href=test2.php>gogogo</a>
…………

記得有人說過這個優點只能在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了.具體實現我記得在phpuser上有一篇文章專門討論過.
最后再說一下:
①經常有人問到"為什么copy你寫好的代碼,卻會出錯,你也太……",再把出錯提示拿來一看:
Warning: open(/tmpsess_eca1da208748db2e9c6bec1fccc182b4, O_RDWR) failed: m (2) in c:/www/test1.php on line 2
其實是他自己的問題:session存放的路徑/tmp不存在.有兩種辦法:一是在根目錄(一般是C:)建一個名為tmp的目錄;二是修改php.ini文件
session.save_path = /tmp ;
把/tmp目錄用絕對路徑指定一個目錄(當然必須存在),如我的php.ini中
session.save_path = G:PHPtempsession ;
②還有一種情況的出錯信息為:
Warning: Cannot send session cache limiter - headers already sent (output started at
c:/www/test1.php:1) in c:/www/test1.php on line 2
這是因為你在用session_start()之前已經數據輸出到客戶端了,比如說Html標簽、文字甚至是空格都不行,所以最好在程序第一句就用session_start().
好了,說了這么些,都是我親自試驗通過的,如果有不對的或不準確的地方歡迎討論([email protected]).
 


主站蜘蛛池模板: 深夜免费视频 | 视频在线亚洲 | 亚洲成人免费看 | 天天躁夜夜躁很很躁麻豆 | 中文字幕第一页在线 | 日韩欧美三级视频 | 亚洲成a人片在线观看中文 亚洲成a人片在线观看精品 | 日本高清在线播放 | 在线免费看污视频 | 色偷偷狠狠色综合网 | 亚洲美女爱爱 | 欧洲乱码专区一区二区三区四区 | 日本一区二区三区在线观看视频 | 亚洲欧洲精品在线 | 日本v片免费一区二区三区 日本vs欧美一区二区三区 | 三区在线观看 | 亚洲国产精品高清在线一区 | 五月天六月婷婷 | 天天干天天草天天射 | 午夜看片影院在线观看 | 人人干美女 | 日本三级香港三级三级人!妇久 | 日韩欧美精品在线视频 | 我要看黄色一级毛片 | 欧美亚洲中日韩中文字幕在线 | 欧美在线观看a | 在线亚洲精品中文字幕美乳 | 热综合一本伊人久久精品 | 欧美一级一一特黄 | 在线久色 | 色天使亚洲综合在线观看 | 日韩美女视频在线 | 亚洲欧美在线综合一区二区三区 | 亚洲国产成人久久综合碰 | 午夜久久久久久网站 | 五月亭亭激情五月 | 欧美一卡二卡三卡四卡乱码 | 一级女人18片毛片免费视频 | 天天爽夜夜爽一区二区三区 | 伊人精品视频 | 欧美一区中文字幕 |