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

來源:互聯網
上載者:User
代碼如下:

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'?

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

回複內容:

代碼如下:

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'?

為何總是輸出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"

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.