※ 引述《Harifucks (疝氣)》之銘言:
: 1. <?php
: 2. session_start();
: 3. if (!session_is_registered('A')) {
: 4. session_register('A');
以一本以PHP 5為書名的書來說,這個範例其實不好。
透過$_SESSION來存取session資料,基本上就不需要(不應該)再使用
session_is_registered()或者session_register()了。
: 5. $_SESSION['A'] = 1;
: 6. }else{
: 7. $_SESSION['A']++;
: 8. }
: 9. echo "Session id = ".session_id()."<p>";
: 10. echo "變數值 = ".$_SESSION['A']."<p>";
: 11. echo "<A HREF=\"./18-6.php\"?SID TARGET=newwin>開新視窗</A>";
: 12. ?>
: 抱歉這是從PHP5 & MySQL4入門學習指南擷取的範例18-6,其中的第11行我
: 有幾個問題不太懂:
: 第一為什麼點選"開新視窗"這個超連結所出來的Session ID和
: 原本的Session ID一樣,哪一部份完成這件事?
這就是session的功用所在。它讓你的程式可以跨request讀取到相同的資料。
你在a.php存入某個資料到session,你的b.php或者第二次呼叫a.php的時候,
都讀得到這個資料。
session_id()回傳的是這個session的唯一識別字串,在同一個session裡面,
這個識別字串都會相同。至於是哪一部分完成這件事,以你看到的狀況來說,
是cookie。PHP會產生session識別字串然後透過cookie送給你的瀏覽器。如果
你的瀏覽器接受這個cookie,這個session識別字串就會透過cookie每次回傳
給你的PHP程式,你的程式就因此能夠取回這個session裡面的資料。
: 第2個問題:"?SID"是什麼,為什麼我把"?SID"拿掉之後網頁的結果還是一樣!
SID是PHP內建的一個常數,如果cookie裡面"沒有"session識別字串的話,SID的值
就會是name=ID。name是在cookie或者url裡面用來參照到session識別字串的
名稱,預設值是PHPSESSID。ID就是你的session識別字串。如果cookie裡面"有"
session識別字串,SID的值就是空白。SID是用來在使用者不接受cookie的時候
能夠繼續使用session功能的變通辦法。
你拿掉?SID之後的結果還是一樣,那是因為你的瀏覽器有接受PHP傳送的cookie。
在這個狀況下,session識別字串不需要透過url來傳遞也可以正常作用,所以
SID的值是空白字串,拿掉也沒有差別。
: 第3個問題:TARGET是什麼有人可以解釋一下嗎?至少在我1998年買的HTML書籍
: 沒有這個東西!
<a>標籤的target屬性很早很早就有了,你買的書裡面沒講到是作者的錯。
: 感謝回答!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.153.37