PHP中cookie的知識點

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP中cookie的知識點,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

什麼是cookie

cookie,即小餅乾,是儲存在使用者代理程式端(瀏覽器是最常見的使用者代理程式)的一些資料片段。瀏覽網頁時,瀏覽器會將 當前頁面有效 cookie放在請求的頭部發送到服務端。

cookie組成

cookie由以下幾部分組成:

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

path,cookie所屬路徑。設定為/author中的cookie不會發送到/category路徑下,但是設定路徑為/的cookie會發送到所有頁面請求。

name, cookie的名稱(鍵名)。

value, cookie的值(內容)。

expires,到期時間。

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

httponly,是否只用作http傳遞用。當設定為true時,瀏覽器端的指令碼語言將無法訪問到該cookie。

cookie的用途

cookie主要用在以下方面:

http是無狀態的協議,為了維持會話需要額外的資料做標記,cookie是最常用的手段。常見的PHPSESSID和JSESSIONID這兩類cookie,分別用在PHP和Java web應用中維持會話。

有些資料需要存放在用戶端,cookie是一種選擇。使用者勾選“下次不再提示”後,該標誌可儲存到用戶端,再次訪問程式讀取設定再決定是否顯示。隨著HTML 5的普及,這部分功能正慢慢被localStorage取代。

PHP端的cookie操作

讀取cookie可以通過$_COOKIE超全域變數讀取到使用者端傳來的所有cookie。$_COOKIE是一個數組,可以遍曆讀取發送過來的cookie的名稱和值。瀏覽器只發送了cookie的索引值到服務端,故而無法讀取到cookie的domain/path/exipres等資訊,因為。

PHP提供了setcookie函數來發送cookie到用戶端。setcookie的函數簽名是:

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

參數與cookie的組成內容相對應: expires預設為0,表示僅當前會話有效,使用者關閉瀏覽器後該cookie將被清除;path預設為當前頁面路徑,即網址最後一個反斜線前的部分;domain預設為當前頁面的網域名稱,如果要擴大使用範圍,可設定為父級網域名稱或者頂級網域名稱; httponly預設為false,建議設定為true避免XSS攻擊。

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

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

cookie的良好實踐

從cookie字面意思便可看出,儲存的是資料片段。web開發中cookie使用的頻率比較高,應該多加以理解。以下是一些使用cookie的良好實踐:

不應該在cookie中儲存過大和過多的資料;
cookie在用戶端和傳輸中是明文可見的,不應該在cookie中儲存敏感資訊;
為了網站和使用者安全,儘可能將cookie的httponly屬性設定為true;
cookie是用戶端完全控制的,也屬於外部輸入,服務端不可盲目相信,應對其進行過濾。
其他

cookie是隨請求發送而來,隨響應而設定到用戶端。理解了這個過程,就可以明白一些新手常見的問題,例如以下代碼:

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

在未設定foo這個cookie的情況下,第5行運行會出錯。原因在於setcookie是設定本次響應的cookie資訊,需要瀏覽器接收到響應並設定後,才能在後續的請求中附帶上該cookie,並沒有反應到本次請求上。

同理,cookie存在於請求和響應的頭部資訊中,而頭部應該在請求本文之前,所以setcookie的函數上下文使用限制同header函數,即:在此之前不能已經發送過響應本文。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.