php系列之setcookie各個引數的作用詳解

2021-09-24 16:00:32 字數 3371 閱讀 5210

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...