2013-08-03 26 views
1

我不知道爲什麼,但以下似乎並不如預期:如何在同一請求中寫入和打印PHP cookie?

<?php 
    setcookie('my_cookie', $_GET['v'], time() + (86400 * 7)); 
    echo $_COOKIE['my_cookie']; 
?> 

如果你把這個文件的PHP的Web服務器上,並用yourdomain.com/index.php?v=value查詢調用它。該值僅在第二個請求中打印到頁面上。爲什麼不在1號?

回答

7

$_COOKIE數組僅表示來自客戶端請求的cookie。 setcookie()添加了一個HTTP標頭,要求客戶端在後續的請求期間發送cookie。

通常情況下,你不應該想要它看起來像更多的請求中的cookie比實際上。相反,您通常應該在腳本中處理早期的,在其他地方維護狀態,並在腳本中設置或重置Cookie 末尾的

+0

我只是想強調svidgen的回答,這是正確的:'set_cookie'會在_response_從server_發送時設置瀏覽器cookie。 '$ _COOKIE' * only *包含從_browser_發送到_request_中的_server_的cookie。這*需要*從服務器到客戶端並返回到服務器*之前進行一次完整的往返*使用'set_cookie'放入的東西將顯示在$ _COOKIE中。 – tamouse

0

setcookie("my_cookie", "value")在響應瀏覽器時創建HTTP標頭Set-Cookie: my_cookie=value。瀏覽器存儲這個cookie。

下一次同一客戶端調用服務器時,它將包含請求中的cookie作爲標頭,Cookie: my_cookie=value,並且php使其可用爲$_COOKIE['my_cookie']

您還可以使用print_r($_COOKIE)print_r($_REQUEST)查看原始標題。