cookie是在響應頭和請求頭中設定鍵為set-cookie的鍵值對,php中主要通過setcookie函式對cookie進行操作,它接受7個引數,後面6個是可選引數:
1.name: cookie的名稱,必選引數.
2.value: cookie的值,當未指定時會刪除這個cookie.
舉例:設定乙個is_login為1的cookie,然後再刪除:
<?php
setcookie('is_login', 1);
?>
執行上面**之後,伺服器會向客戶端傳送建立cookie的指令,開啟控制面板可以看到cookie已經存了進去:
然後執行以下**刪除這條cookie:
<?php
setcookie('is_login');
?>
重新整理介面可以看到這條cookie已被刪除:
3.expire: cookie的過期時間,0或未指定時會預設當前會話為有效期,關閉瀏覽器後cookie會被清除,它接受時間戳格式.看一下下面的案例:設定乙個會話期間有效的cookie: is_login和乙個有效期一天的cookie: is_out:
<?php
setcookie('is_login', 1);
setcookie('is_out', 1, time() + 24 * 60 * 60);
?>
執行上面**,可以看到cookie已經存到客戶端,奇了個怪的是,chrome瀏覽器會話時間顯示為1969-12-31t23:59:59.000z,但是不影響使用,可能是谷歌的特色吧:
ok,清除一下**,把網頁關掉再開啟,闊以發現還是存在兩個cookie:
看來一定要關閉瀏覽器才能結束當前會話,關閉瀏覽器再次開啟本介面,可以看到基於上次會話有效的is_login已經麼得了:
4.path: cookie的有效路徑,當設定'/'時有效路徑為根目錄,所有根目錄和子目錄都可以訪問;設定為'/header/'時是指只有根目錄下的header資料夾中的網頁和header下子目錄的網頁才能訪問到.案例:
<?php
setcookie('is_login', 1, 0, '/scripts/');
setcookie('is_out', 1);
?>
執行以上**,設定is_login有效路徑為根目錄中scripts資料夾,設定is_out有效路徑為預設的根目錄.開啟根目錄下的一級網頁:
發現只能看到is_out的cookie;開啟scripts下的網頁:
兩個cookie都可以取到.
5.domain:cookie的有效網域名稱.僅指定網域名稱或其子網域名稱可以訪問到.案例:在同乙個指令碼中設定乙個cookie有效網域名稱為site1.dev,再設定乙個cookie有效網域名稱為www.site1.dev:
<?php
setcookie('is_login', 1, 0, '/', 'site1.dev');
setcookie('is_out', 0, 0, '/', 'www.site1.dev');
?>
通過site1.dev開啟網頁:
發現只能看到is_login的cookie,而限制其子網域名稱為有效路徑的is_out則無法獲取到,說明有效路徑向上無效.開啟www.site1.dev:
而www.site1.dev兩個cookie都能看到,這說明有效路徑向下同樣有效,site1.dev的cookie:is_login,在其子網域名稱www.site1.dev內同樣能取到.我們再來試一下,如果我們再自己的**中設定一下baidu.com等其他**的cookie,在其它**中能否訪問得到呢?案例:在site1.dev的網頁中設定site2.dev的cookie:
<?php
setcookie('is_login', 1, 0, '/', 'site2.dev');
?>
下面開啟site2.dev,到底能否取到is_login的cookie呢,讓我們拭目以待:
很明顯不可以取到.如果能取到的話,估計整個網際網路都亂套了吧0.0
6.secure: 設定是否僅在https連線的情況下才設定此cookie,true是,false否.
7.httponly: 是否只能通過http協議訪問,是的話則無法在js中通過document.cookie訪問,這個引數和上乙個沒有任何關係,大家不要混淆.案例:設定乙個is_login的httponly為true,is_out的httponly為false,然後從瀏覽器控制台使用document.cookie列印:
<?php
setcookie('is_login', 1, 0, '/', 'site1.dev', false, true);
setcookie('is_out', 1, 0, '/', 'site1.dev', false, false);
?>
開啟網頁:
可以發現is_login的http一列打了乙個√,我們在控制台列印一下document.cookie:
js中只能訪問到is_out;而is_login由於設定了httponly,因此無法通過其它途徑訪問!
php的setcookie 函式詳解
一.瀏覽器cookie原理 二.php中的cookie設定 bool setcookie string name string value int expire string path string domain bool secure 1.六個要素 名稱,值,超時,cookie有效的 路徑,coo...
php服務端setcookie 原理
1 什麼是 cookie?cookie 常用於識別使用者。cookie 是伺服器留在使用者計算機中的小檔案。每當相同的計算機通過瀏覽器請求頁面時,它同時會傳送 cookie。通過 php,您能夠建立並取回 cookie 的值。2 如何取回 cookie 的值?php 的 cookie 變數用於取回 ...
php如何處理setcookie失效的問題
1 瀏覽器開啟cookie。2 刪除在setcookie 之前的任何http頭部輸出。3 使用php的setcookie 來建立cookie即可。使用php的setcookie 來建立cookie和php中開啟session的 session start 一樣,在setcookie 之前不能有任何h...