佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > PHP中cookie知識點學(xué)習(xí)

PHP中cookie知識點學(xué)習(xí)

熱門標(biāo)簽:服務(wù)器配置 銀行業(yè)務(wù) Linux服務(wù)器 電子圍欄 阿里云 科大訊飛語音識別系統(tǒng) Mysql連接數(shù)設(shè)置 團購網(wǎng)站

什么是cookie

cookie,即小餅干,是保存在用戶代理端(瀏覽器是最常見的用戶代理)的一些數(shù)據(jù)片段。瀏覽網(wǎng)頁時,瀏覽器會將 當(dāng)前頁面有效的 cookie放在請求的頭部發(fā)送到服務(wù)端。

cookie組成

cookie由以下幾部分組成:

domain,cookie所屬的域名。瀏覽器發(fā)送cookie時,會檢查cookie所屬的域名,相符才會發(fā)送。瀏覽器會將tlanyan.me域下的cookie發(fā)送到www.tlanyan.me或者dev.tlanyan.me的頁面請求中,但不會發(fā)送給www.baidu.com。同樣,dev.tlanyan.me的cookie不能發(fā)送給tlanyan.me,因為限定了域名為dev子域。

path,cookie所屬路徑。設(shè)置為/author中的cookie不會發(fā)送到/category路徑下,但是設(shè)置路徑為/的cookie會發(fā)送到所有頁面請求。

name, cookie的名稱(鍵名)。

value, cookie的值(內(nèi)容)。

expires,過期時間。

secure,是否僅在https時才會傳送該cookie。

httponly,是否只用作http傳遞用。當(dāng)設(shè)置為true時,瀏覽器端的腳本語言將無法訪問到該cookie。

cookie的用途

cookie主要用在以下方面:

http是無狀態(tài)的協(xié)議,為了維持會話需要額外的數(shù)據(jù)做標(biāo)記,cookie是最常用的手段。常見的PHPSESSID和JSESSIONID這兩類cookie,分別用在PHP和Java web應(yīng)用中維持會話。

有些數(shù)據(jù)需要存放在客戶端,cookie是一種選擇。用戶勾選“下次不再提示”后,該標(biāo)志可保存到客戶端,再次訪問程序讀取設(shè)定再決定是否顯示。隨著HTML 5的普及,這部分功能正慢慢被localStorage取代。

PHP端的cookie操作

讀取cookie可以通過$_COOKIE超全局變量讀取到用戶端傳來的所有cookie。$_COOKIE是一個數(shù)組,可以遍歷讀取發(fā)送過來的cookie的名稱和值。瀏覽器只發(fā)送了cookie的鍵值到服務(wù)端,故而無法讀取到cookie的domain/path/exipres等信息,因為。

PHP提供了setcookie函數(shù)來發(fā)送cookie到客戶端。setcookie的函數(shù)簽名是:

bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )

參數(shù)與cookie的組成內(nèi)容相對應(yīng): expires默認(rèn)為0,表示僅當(dāng)前會話有效,用戶關(guān)閉瀏覽器后該cookie將被清除;path默認(rèn)為當(dāng)前頁面路徑,即網(wǎng)址最后一個反斜杠前的部分;domain默認(rèn)為當(dāng)前頁面的域名,如果要擴大使用范圍,可設(shè)置為父級域名或者頂級域名; httponly默認(rèn)為false,建議設(shè)置為true避免XSS攻擊。

刪除cookie,只需要設(shè)置cookie的expires為過去的時間戳即可,例如 time() – 3600。所以要刪除foo這個cookie,代碼可以為

setcookie('foo', '', time() - 3600);

cookie的良好實踐

從cookie字面意思便可看出,保存的是數(shù)據(jù)片段。web開發(fā)中cookie使用的頻率比較高,應(yīng)該多加以理解。以下是一些使用cookie的良好實踐:

不應(yīng)該在cookie中保存過大和過多的數(shù)據(jù);
cookie在客戶端和傳輸中是明文可見的,不應(yīng)該在cookie中保存敏感信息;
為了站點和用戶安全,盡可能將cookie的httponly屬性設(shè)置為true;
cookie是客戶端完全控制的,也屬于外部輸入,服務(wù)端不可盲目相信,應(yīng)對其進(jìn)行過濾。
其他

cookie是隨請求發(fā)送而來,隨響應(yīng)而設(shè)置到客戶端。理解了這個過程,就可以明白一些新手常見的問題,例如以下代碼:

if (!isset($_COOKIE['foo']) {
   setcookie('foo', 'foobar');
 } 
 $foo = $_COOKIE['foo'];

在未設(shè)置foo這個cookie的情況下,第5行運行會出錯。原因在于setcookie是設(shè)置本次響應(yīng)的cookie信息,需要瀏覽器接收到響應(yīng)并設(shè)置后,才能在后續(xù)的請求中附帶上該cookie,并沒有反應(yīng)到本次請求上。

同理,cookie存在于請求和響應(yīng)的頭部信息中,而頭部應(yīng)該在請求正文之前,所以setcookie的函數(shù)上下文使用限制同header函數(shù),即:在此之前不能已經(jīng)發(fā)送過響應(yīng)正文。

您可能感興趣的文章:
  • 詳解cookie驗證的php應(yīng)用的一種SSO解決辦法
  • PHP與JavaScript針對Cookie的讀寫、交互操作方法詳解
  • PHP利用Cookie設(shè)置用戶30分鐘未操作自動退出功能
  • PHP中Cookie的使用詳解(簡單易懂)
  • php及codeigniter使用session-cookie的方法(詳解)
  • PHP如何讀取由JavaScript設(shè)置的Cookie
  • PHP設(shè)置Cookie的HTTPONLY屬性方法
  • php cookie用戶登錄的詳解及實例代碼
  • php頁面跳轉(zhuǎn)session cookie丟失導(dǎo)致不能登錄等問題的解決方法
  • php cookie 詳解使用實例
  • PHP Cookie學(xué)習(xí)筆記

標(biāo)簽:廣元 大理 萍鄉(xiāng) 衡水 棗莊 江蘇 蚌埠 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中cookie知識點學(xué)習(xí)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    全南县| 宁夏| 伊川县| 图们市| 万荣县| 武清区| 宽城| 金沙县| 新野县| 神农架林区| 通海县| 来宾市| 崇阳县| 海盐县| 收藏| 蒙阴县| 托克逊县| 常德市| 绵阳市| 比如县| 基隆市| 拜泉县| 蓬安县| 拜城县| 霍城县| 综艺| 松潘县| 巢湖市| 尤溪县| 安溪县| 赤峰市| 无极县| 洪洞县| 佛冈县| 台湾省| 绥宁县| 张掖市| 南安市| 乐业县| 大名县| 临猗县|