首頁  >  文章  >  後端開發  >  php新手請教一個關於cookie的問題

php新手請教一個關於cookie的問題

WBOY
WBOY原創
2016-10-10 11:56:17841瀏覽

程式碼如下:

<code>function cookie($name) {
    return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}

/**
 * 从客户端浏览器删除一个 Cookie。
 * @param  string $cookie_name 要删除的 Cookie 名称。
 * @return void
 */
function delete_cookie($cookie_name) {
    setcookie($cookie_name, '', time() - 2 * 24 * 3600);
    unset($_COOKIE[$cookie_name]);
}

delete_cookie('mycookie');
setcookie('mycookie', 'myvalue');
var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?</code>

為何總是輸出NULL?為什麼不是輸出剛剛設定的'myvalue'?

回覆內容:

程式碼如下:

<code>function cookie($name) {
    return isset($_COOKIE[$name]) ? $_COOKIE[$name] : null;
}

/**
 * 从客户端浏览器删除一个 Cookie。
 * @param  string $cookie_name 要删除的 Cookie 名称。
 * @return void
 */
function delete_cookie($cookie_name) {
    setcookie($cookie_name, '', time() - 2 * 24 * 3600);
    unset($_COOKIE[$cookie_name]);
}

delete_cookie('mycookie');
setcookie('mycookie', 'myvalue');
var_dump(cookie('mycookie')); // 为何这里总是输出NULL?为什么不是输出刚刚设置的'myvalue'?</code>

為何總是輸出NULL?為什麼不是輸出剛剛設定的'myvalue'?

COOKIE 是你從你的客戶端帶過去的,所以讀到COOKIE應該是上次腳本設定的,然而你每次執行這個腳本時, 都把上次設定的COOKIE刪了,然後設定了一個新COOKIE ,這個COOKIE只能被下次執行的腳本讀取到。然後一直進行 刪-設-刪-設 的循環。 。 。所以讀不到咯。
如果把COOKIE改為SESSION的話,就能讀到了,SESSION不會像COOKIE這樣慢一拍的。它是保存在伺服器的。

因為COOKIE的賦值只有等下一次瀏覽請求才能生效。但你等到下次瀏覽的時候你delete掉了,所以就一直,這個COOKIE和你多大仇..

你在本次請求中已經刪除了$_COOKIE['mycookie'],而setcookie需要下一次請求才生效.
$_COOKIE是瀏覽器把cookie訊息傳給PHP.
setcookie是PHP把cookie訊息告訴瀏覽器.
也就是$_COOKIE['xxx']的產生需要setcookie('xxx')所在的請求先執行完成.

如果你想輸出‘myvalue’,可以將unset($_COOKIE[$cookie_name]);註解掉。就可以輸出了

unset 會立即生效,但是 set_cookie 需要下一次請求才會有效果。

同理,如果刪除了 unset 這一句,輸出的結果並不是剛剛 set_cookie 的,而是上一次 set_cookie 的。

例如,我把 unset 這一句刪除,然後刷新,會顯示 string(7) "myvalue",沒有問題;

接著我把 myvalue 改成 myvalue2,然後刷新,還是顯示 string(7) "myvalue"

再刷新一次,才會顯示 string(8) "myvalue2"

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn