Cookie ?
百度百科:Cookie
維基百科:Cookie
我的個(gè)人理解:
- cookie 是存儲在客戶端(一般是瀏覽器)的一段小文本
- cookie 由服務(wù)端發(fā)送給客戶端浑彰,發(fā)送方式:http頭
- 如果客戶端中存儲著站點(diǎn)的cookie耗美,每次訪問此站點(diǎn)都會帶上cookie
舉個(gè)例子:
你是醬油鋪的老板呵燕,每天都會有十幾個(gè)戴著面具和穿這衣服的人來打醬油(假設(shè)面具與衣服一模一樣绍移,你辨認(rèn)不出來)掐隐,但醬油鋪每天的存貨有限蔚舀,每人每天只能打一瓶醬油◇№铮現(xiàn)在有個(gè)不壞好意的人想一天打多瓶醬油刃泡,讓醬油鋪缺貨巧娱,從而導(dǎo)致后面的客人無法買到醬油碉怔,你為了遏止這種惡意行為,在每位已經(jīng)購買了醬油的客人做了一個(gè)標(biāo)記禁添,以這種方法來辨別客人是否已經(jīng)購買醬油撮胧,保證了購買的公平性。
當(dāng)然上荡,上面的例子是我隨意構(gòu)造出來的趴樱,比喻并不是很準(zhǔn)確。
在上面的例子中酪捡,醬油鋪老板就是服務(wù)端叁征,客人就是客戶端,那個(gè)標(biāo)志就是cookie逛薇。
為什么需要cookie捺疼?
“需求-供應(yīng)” 關(guān)系永遠(yuǎn)都不會變,有需求就有供應(yīng)永罚,cookie技術(shù)的出現(xiàn)也不例外啤呼。
web世界中,傳輸WWW文件(html,javascript,css,image.......)使用的是HTTP協(xié)議呢袱,而HTTP協(xié)議是無狀態(tài)協(xié)議官扣,也就是說,就算你客戶端與服務(wù)端剛剛傳輸了文件羞福,你再次發(fā)送請求惕蹄,服務(wù)端也不會記得“你丫的是誰”。那要是我開發(fā)的網(wǎng)站一定要服務(wù)端“辨別”出客戶端呢治专?那就開個(gè)新技術(shù)咯
所以cookie就被搞出來了卖陵。就像醬油店的老板的做法一樣。下次客戶端訪問服務(wù)端的時(shí)候就會帶上服務(wù)端給的cookie张峰,服務(wù)端通過cookie就可以辨認(rèn)客戶端了泪蔫。
相關(guān)函數(shù)
- setcookie() -- 設(shè)置Cookie
// 函數(shù)原型
setcookie($cookieName [,$cookieValue="" [,$expire=0 [,$path="" [,$domain="" [,$secure=false [,$httponly=false]]]]]])
相關(guān)數(shù)組
- $_COOKIE[ ] -- 保存cookie相關(guān)信息
設(shè)置一個(gè)簡單的cookie
<?php
$returnValue = setcookie('cookie_1'); // cookie名稱為cookie_1 值不設(shè)置
var_dump($returnValue); // 打印setcookie()返回值
?>
//運(yùn)行結(jié)果
D:\WampServer\www\MyPhpCode\01.php:33:boolean true
為cookie設(shè)置值
<?php
$returnValue = setcookie('cookie_2','cookie_2_value'); // cookie名稱:cookie_2 , cookie值:cookie_2_value
var_dump($returnValue);
?>
// 運(yùn)行結(jié)果
D:\WampServer\www\MyPhpCode\01.php:28:boolean true
細(xì)心的讀者可能發(fā)現(xiàn)了一個(gè)問題:之前創(chuàng)建的cookie_1到哪里去了喘批?
emm...... 消失了撩荣,對的,它已經(jīng)人間蒸發(fā)了谤祖。
人間蒸發(fā)婿滓??粥喜?凸主?那我這么辛苦的碼了兩行代碼才搞到客戶端里的小餅干(cookie)就這么沒了?额湘?卿吐?
再運(yùn)行下php腳本旁舰,火速到瀏覽器查看下cookie。
怎么玩?唯有續(xù)命
給小餅干續(xù)命就用第三個(gè)參數(shù) expire
expire參數(shù)設(shè)置cookie的有效期尚骄,也就是小餅干更可以活多久块差,至于活多久,就由你來決定了倔丈。
注意:此參數(shù)接收時(shí)間戳憨闰。php會內(nèi)部轉(zhuǎn)換日期。
為cookie設(shè)置到期時(shí)間
<?php
$returnValue = setcookie('cookie_3','cookie_3_value',time()+30); // cookie有效時(shí)間為 30 秒
var_dump($returnValue);
?>
time()函數(shù)用于獲取當(dāng)前時(shí)間的時(shí)間戳
<?php
/**
* 此php用于獲取上面的設(shè)置的cookie(cookie_3)的值
* 獲取方式:$_CIOOKIE[]
* 要在cookie_3創(chuàng)建30秒內(nèi)獲取需五,不然你會收到錯(cuò)誤:‘Notice: Undefined index: cookie_3 ’
*/
$cookieName = "cookie_3" ; // 要獲取的cookie的名稱
$cookieValue = $_COOKIE[$cookieName]; // 獲取對應(yīng)值
var_dump($cookieValue);
?>
// 輸出
D:\WampServer\www\MyPhpCode\02.php:5:string 'cookie_3_value' (length=14)
等等 鹉动??宏邮?cookie不是保存在客戶端的么训裆,php運(yùn)行在服務(wù)端,為什么php可以搞到客戶端的cookie蜀铲??属百。那是因?yàn)榭蛻舳嗽L問服務(wù)端時(shí)會帶上cookie记劝。
為cookie設(shè)置路徑
路徑,哦~~族扰,cookie在客戶端的存儲路徑而已厌丑,路徑這種東西我早就知道了,不用說了渔呵。其實(shí)cookie的路徑并不是指客戶端的存儲路徑,而是指php腳本在服務(wù)器的路徑扩氢「郏看下面操作。
網(wǎng)站結(jié)構(gòu)
WWW
|
|- MyPhpCode
| |- 01.php
| |- 02.php
|
|- MyPhpCode2
| |- 01.php
網(wǎng)站根目錄:WWW
/MyPhpCode/01.php:創(chuàng)建cookie
/MyPhpCode/02.php:獲取cookie值
/MyPhpCode2/01.php:獲取cookie值
現(xiàn)在用/MyPhpCode/01.php來設(shè)置一個(gè)cookie录豺,然后使用/MyPhpCode2/01.php來讀取cookie看看結(jié)果如何
<?php
/**
* /MyPhpCode/01.php
*/
$returnValue = setcookie('cookie_4','cookie_4_value',time()+60,'/MyPhpCode'); // 指定路徑為 /MyPhpCode
var_dump($returnValue);
?>
/**
* /MyPhpCode2/01.php
*/
<?php
$cookieName = "cookie_4" ;
$cookieValue = $_COOKIE[$cookieName]; // 獲取 cookie_4的值
var_dump($cookieValue);
?>
// /MyPhpCode2/01.php 輸出
D:\WampServer\www\MyPhpCode2\01.php:5:null
同時(shí)還報(bào)了 Notice: Undefined index: cookie_4 錯(cuò)誤
并不能讀取cookie_4的值
現(xiàn)在用 /MyPhpCode/02.php 來嘗試下
/**
* /MyPhpCode/02.php
*/
<?php
$cookieName = "cookie_4" ;
$cookieValue = $_COOKIE[$cookieName]; // 獲取 cookie_4的值
var_dump($cookieValue);
?>
// /MyPhpCode/02.php 輸出
D:\WampServer\www\MyPhpCode\02.php:5:string 'cookie_4_value' (length=14)
以上對比可以看出朦肘,如果設(shè)置了cookie的路徑饭弓,要與設(shè)置cookie的php處于同于路徑之下才有權(quán)訪問cokie。
到這里媒抠,PHP中cokie的操作已經(jīng)介紹的 七七八八了 弟断,至于setcookie() 函數(shù)后面幾個(gè)參數(shù),哼哼哼哼哼哼哈哈哈哈哈哈哈哈哈趴生,我也不太了解阀趴,這么跟你說吧,我就是半吊子苍匆。等有空學(xué)下其他的cookie操作再續(xù)寫文章了刘急。