PHP cookie的使用

FreeeLinux發表於2017-03-28

獲取

獲取瀏覽器在請求時攜帶的cookie資料,使用超全域性陣列變數, $_COOKIE完成對cookie的獲取。
其中每個 $_COOKIE 中的元素,對應一個cookie變數,元素的鍵就是cookie的key,元素的值就是cookie的value。

時間設定

通過cookie的第三個引數可以設定,有效期採用一個時間戳進行表示。
瀏覽器在向伺服器傳送請求時,會檢測到cookie是否有效,只有沒有過有效期的cookie的資料請求時,才會攜帶。

語法

特殊的有效期值:

  • 0,預設的,表示會話週期
  • Time()-1,刪除cookie的標準做法,setCookie(‘KEY’, time()-1)
  • PHP_INT_MAX:邏輯上表示永久有效的cookie,到2038年。

有效路徑

cookie在當前目錄及其後代目錄有效。

Tip:路徑,不是程式碼所在檔案的路徑,而是瀏覽器請求的路徑。設定’/’可以保證站點所有路徑有效。

有效域

Cookie僅在當前域下有效。

可以通過設定,使cookie的有效域擴充套件到某個一級域名下的所有子域。

第五個引數可以做到。

setCookie('domain_name', 'in_test_kang', 0, '', 'kang.com');

是否僅安全傳輸

https://加密的http協議。

httponly屬性

開啟httponly為true,則不可以被其他指令碼訪問cookie,比如js指令碼。
測試如下:

<?php
setCookie('do_httponly', 'php34', 0, '', '', false, true);
setCookie('not_httponly', 'php34', 0, '', '', false, false);

?>
<?php

echo '<pre>';
var_dump($_COOKIE);

?>

<script type="text/javascript">
    console.log(document.cookie);
    alert(document.cookie);
</script>

在控制檯上只能看到:
這裡寫圖片描述

語法

cookie值,僅僅支援字串型別。可以寫成陣列形式,但是它是兩個cookie變數。只是我們自己使用時用陣列方便而已。

$_COOKIE僅僅是儲存瀏覽器請求時攜帶的cookie。當前指令碼週期內,設定的cookie,還沒有攜帶,所以不會有效。下次執行指令碼時,則會攜帶cookie。

類似於header(),setCookie()前也不能存在任何的輸出。這是HTTP協議規定導致的。

相關文章