Cookie 是什么?
cookie是保存在客戶端的信息包(一個文件)
cookie 常用于識別用戶。
cookie 是一種服務器留在用戶計算機上的小文件。每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。通過 PHP,您能夠創建并取回 cookie 的值。
如何創建 Cookie?
setcookie() 函數用于設置 cookie。s
注釋:setcookie() 函數必須位于 標簽之前。
語法:
setcookie(name, value, expire, path, domain);
- ?
注釋:在發送 cookie 時,cookie 的值會自動進行 URL 編碼,在取回時進行自動解碼。(為防止 URL 編碼,請使用 setrawcookie() 取而代之。)
注:
- 在響應頭中可以看到cookie的信息
- 客戶端有cookei信息后,每次請求服務器,cookie的信息都會自動的放到請求頭中帶到服務器。
如何取回 Cookie 的值?
PHP 的 $_COOKIE 變量用于取回 cookie 的值。
在下面的實例中,我們取回了名為 “user” 的 cookie 的值,并把它顯示在了頁面上:
<?php
// 輸出 cookie 值
echo $_COOKIE["user"];// 查看所有 cookie
print_r($_COOKIE);
?>
- ?
注意:
1、關閉瀏覽器后,cookie消失。這種cookie稱為臨時性cookie
2、cookie的信息不可以在不同的瀏覽器中共享,不可以跨瀏覽器。
臨時性cookie:
說明:關閉瀏覽器后,cookie的值消失
永久性cookie
說明:關閉瀏覽器后cookie的值不消失
語法:給cookie添加過期時間就形成了永久性cookie,過期時間是時間類型是時間戳
eg。
$time=time()+3600;
setcookie('name','tom',$time); //cookie的有效時間是3600秒
- ?
cookie的有效目錄
cookie默認在當前目錄及子目錄中有效
cookie一般要設置在整站有效
setcookie('name','tom',0,'/'); // /表示根目錄
- ?
支持子域名
場景:每個域名代碼一個網站,網站之間的cookie是不可以相互訪問的。
多個子域名下如何實現cookie共享:
問題:百度下有多個二級域名的網站,他們自己的cookie是要共享的,如何實現?
<?php//在baidu.com域名下都有效
setcookie('name','tom',0,'/','baidu.com');
?>
<a href="http://www.bb.baidu.com/bb.php">跳轉</a>
- ?
是否安全傳輸
安全傳輸就是https傳輸。
默認情況下https和http都可以傳輸cookie
setcookie('name','tom',0,'/','',true); // true表示只能是https傳輸
- ?
是否安全訪問
默認情況下,PHP和JS都可以訪問cookie
安全訪問:PHP可以訪問,JS不可以 默認是false。
php代碼:
<?php
setcookie('name','tom',0,'/','',false,true);
?>
<a href="/5-demo2.php">跳轉</a>
- ?
html代碼:
<?php
echo $_COOKIE['name'],'<br>'; //PHP獲取cookie
?><script type="text/javascript">document.write(document.cookie); //js獲取cookie
</script>
- ?
刪除cookie
注意:cookie中只能保存數字和字符串。
<?php
//setcookie('name',false); //刪除cookie方法一
//setcookie('name'); //刪除cookie方法二
setcookie('name','tom',time()-1); //刪除cookie方法三
- ?
cookie的缺點
1、因為在瀏覽器中可以看到cookie 的值,所以安全性低
2、因為只能保存字符串和數字,所以可控性差
3、因為數據放在請求頭中傳輸,增加了請求時候的數據負載。
4、因為數據存儲在瀏覽器中,但瀏覽器存儲空間是有吸限制的,一般是4K。