2011-12-15 76 views
0

這裏是一段代碼:會話cookie:奇怪的行爲?還是我在這裏沒有理解什麼?

session_name('somename'); 
session_start(); 
echo 'session name:'.session_name(); 

上述辦法打印會話名稱爲somename。 如果我追加下面的代碼,

if(isset($_COOKIE['somename'])) { 
echo "<br/><br/>"."Cookie somename not yet set"; 
} 
else { 
echo "<br/><br/>".var_dump($_COOKIE['somename']); 
} 

輸出始終

餅乾somename尚未確定。

我使用的isset功能錯了嗎?

如果我只是把這段:

echo "<br/><br/>".var_dump($_COOKIE['somename']); 

然後,輸出首次爲:

會議名稱:somename
注意:未定義指數:somename在/路徑/ to/file.php on line 12 NULL

如果我刷新頁面,那麼輸出是

會議名稱:somename
字符串(26) 「367jr029jj17mdu5fgkfgiv0u6」

是不應該被載入頁面內容之前得到設置cookie變量?還是我不理解會話/ cookies?

+0

我不太喜歡你的縮進風格。 – 2012-01-01 15:06:17

+0

此外,不要在問題中發佈解決方案。 – 2012-01-01 15:06:33

+0

@ TomalakGeret'kal好的! – ThinkingMonkey 2012-01-01 15:15:03

回答

1

擴展在Jani Hartikainen's answer

isset()檢查是否$_COOKIE['somename']設置。

通過 餅乾

第一次設置:

// $_COOKIE['somename'] is NOT set so skip to else 
if(isset($_COOKIE['somename'])) { 
echo "<br/><br/>"."Cookie somename not yet set"; 
} 
else { 
// $_COOKIE['somename'] is NOT set so you get an error. 
echo "<br/><br/>".var_dump($_COOKIE['somename']); 
} 

第二次通過後的cookie設置:

// $_COOKIE['somename'] is set so show message 
if(isset($_COOKIE['somename'])) { 
echo "<br/><br/>"."Cookie somename not yet set"; 
} 
else { 
// $_COOKIE['somename'] is set so skip this part. 
echo "<br/><br/>".var_dump($_COOKIE['somename']); 
} 

一個更合適使用的isset會是這樣的:

if(isset($_COOKIE['somename'])) { 
echo "<br/><br/>".var_dump($_COOKIE['somename']); 
} 
else { 
    echo "<br/><br/>"."Cookie somename not yet set"; 
} 

在最後一個示例中,我使用isset來確定是否設置了$_COOKIE['somename']。如果是這樣,那我就傾倒它;否則,我將顯示消息「 Cookie somename尚未設置」

1

在瀏覽器實際發送它們之前,Cookies未被設置爲$_COOKIE

它的工作原理是這樣的:

請求1:

Your script starts 
$_COOKIE is empty 
session_start() 
Your script ends 
-> cookies to browser 

請求2:

<- browser sends cookies in request 
Your script starts 
$_COOKIE contains your cookie 
...  
相關問題