
- PHP 教程
- PHP - 首頁
- PHP - 簡介
- PHP - 安裝
- PHP - 歷史
- PHP - 特性
- PHP - 語法
- PHP - Hello World
- PHP - 註釋
- PHP - 變數
- PHP - Echo/Print
- PHP - var_dump
- PHP - $ 和 $$ 變數
- PHP - 常量
- PHP - 魔法常量
- PHP - 資料型別
- PHP - 型別轉換
- PHP - 型別混淆
- PHP - 字串
- PHP - 布林值
- PHP - 整數
- PHP - 檔案與 I/O
- PHP - 數學函式
- PHP - Heredoc 和 Nowdoc
- PHP - 複合型別
- PHP - 檔案包含
- PHP - 日期與時間
- PHP - 標量型別宣告
- PHP - 返回型別宣告
- PHP 運算子
- PHP - 運算子
- PHP - 算術運算子
- PHP - 比較運算子
- PHP - 邏輯運算子
- PHP - 賦值運算子
- PHP - 字串運算子
- PHP - 陣列運算子
- PHP - 條件運算子
- PHP - 展開運算子
- PHP - 空值合併運算子
- PHP - 宇宙飛船運算子
- PHP 控制語句
- PHP - 決策
- PHP - If…Else 語句
- PHP - Switch 語句
- PHP - 迴圈型別
- PHP - For 迴圈
- PHP - Foreach 迴圈
- PHP - While 迴圈
- PHP - Do…While 迴圈
- PHP - Break 語句
- PHP - Continue 語句
- PHP 函式
- PHP - 函式
- PHP - 函式引數
- PHP - 按值傳遞
- PHP - 按引用傳遞
- PHP - 預設引數
- PHP - 具名引數
- PHP - 可變引數
- PHP - 返回值
- PHP - 傳遞函式
- PHP - 遞迴函式
- PHP - 型別提示
- PHP - 變數作用域
- PHP - 嚴格型別
- PHP - 匿名函式
- PHP - 箭頭函式
- PHP - 可變函式
- PHP - 區域性變數
- PHP - 全域性變數
- PHP 超全域性變數
- PHP - 超全域性變數
- PHP - $GLOBALS
- PHP - $_SERVER
- PHP - $_REQUEST
- PHP - $_POST
- PHP - $_GET
- PHP - $_FILES
- PHP - $_ENV
- PHP - $_COOKIE
- PHP - $_SESSION
- PHP 檔案處理
- PHP - 檔案處理
- PHP - 開啟檔案
- PHP - 讀取檔案
- PHP - 寫入檔案
- PHP - 檔案是否存在
- PHP - 下載檔案
- PHP - 複製檔案
- PHP - 追加檔案
- PHP - 刪除檔案
- PHP - 處理 CSV 檔案
- PHP - 檔案許可權
- PHP - 建立目錄
- PHP - 列出檔案
- 面向物件 PHP
- PHP - 面向物件程式設計
- PHP - 類和物件
- PHP - 建構函式和解構函式
- PHP - 訪問修飾符
- PHP - 繼承
- PHP - 類常量
- PHP - 抽象類
- PHP - 介面
- PHP - 特性
- PHP - 靜態方法
- PHP - 靜態屬性
- PHP - 名稱空間
- PHP - 物件迭代
- PHP - 封裝
- PHP - Final 關鍵字
- PHP - 過載
- PHP - 克隆物件
- PHP - 匿名類
- PHP Web 開發
- PHP - Web 概念
- PHP - 表單處理
- PHP - 表單驗證
- PHP - 表單郵件/URL
- PHP - 完整表單
- PHP - 檔案包含
- PHP - GET 和 POST
- PHP - 檔案上傳
- PHP - Cookie
- PHP - 會話
- PHP - 會話選項
- PHP - 傳送郵件
- PHP - 淨化輸入
- PHP - Post-Redirect-Get (PRG)
- PHP - 快閃記憶體訊息
- PHP 高階
- PHP - MySQL
- PHP.INI 檔案配置
- PHP - 陣列解構
- PHP - 編碼規範
- PHP - 正則表示式
- PHP - 錯誤處理
- PHP - Try…Catch
- PHP - Bug 除錯
- PHP - 針對 C 開發人員
- PHP - 針對 PERL 開發人員
- PHP - 框架
- PHP - 核心 PHP 與框架
- PHP - 設計模式
- PHP - 過濾器
- PHP - JSON
- PHP - 異常
- PHP - 特殊型別
- PHP - 雜湊
- PHP - 加密
- PHP - is_null() 函式
- PHP - 系統呼叫
- PHP - HTTP 認證
- PHP - 交換變數
- PHP - Closure::call()
- PHP - 過濾後的 unserialize()
- PHP - IntlChar
- PHP - CSPRNG
- PHP - 期望
- PHP - Use 語句
- PHP - 整數除法
- PHP - 已棄用的特性
- PHP - 已移除的擴充套件和 SAPI
- PHP - PEAR
- PHP - CSRF
- PHP - FastCGI 程序
- PHP - PDO 擴充套件
- PHP - 內建函式
- PHP 有用資源
- PHP - 速查表
- PHP - 問答
- PHP - 快速指南
- PHP - 線上編譯器
- PHP - 有用資源
- PHP - 討論
PHP - Cookie
全球資訊網由 HTTP 協議提供支援,HTTP 協議是一種無狀態協議。Cookie 的機制幫助伺服器維護先前請求的資訊。PHP 透明地支援 HTTP Cookie。
當客戶端第一次傳送請求時,伺服器會在其響應中包含一小段資料作為 Cookie。PHP 提供了 **setcookie()** 方法來在響應中注入 Cookie。
此 Cookie 資料作為文字檔案儲存在客戶端的機器中。在相同客戶端的後續訪問中,這些 Cookie 將作為 **請求** 標頭的部分內容包含在內。
伺服器使用 PHP 超全域性變數“$_COOKIE”填充客戶端請求中存在的全部 Cookie。
本章將教你如何設定 Cookie、如何訪問它們以及如何刪除它們。
Cookie 的結構
Cookie 通常在 HTTP 標頭中設定(儘管 JavaScript 也可以直接在瀏覽器上設定 Cookie)。設定 Cookie 的 PHP 指令碼可能會發送如下所示的標頭:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2000 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; path=/; domain=tutorialspoint.com Connection: close Content-Type: text/html
如您所見,Set-Cookie 標頭包含一個名稱值對、一個 GMT 日期、一個路徑和一個域名。名稱和值將進行 URL 編碼。expires 欄位是指示瀏覽器在給定的時間和日期後“忘記”Cookie 的指令。
如果瀏覽器配置為儲存 Cookie,它將保留此資訊,直到過期日期。如果使用者將瀏覽器指向與 Cookie 的路徑和域匹配的任何頁面,它將把 Cookie 重新發送到伺服器。瀏覽器的標頭可能如下所示:
GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc) Host: zink.demon.co.uk:1126 Accept: image/gif, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Cookie: name=xyz
然後,PHP 指令碼將能夠在環境變數 $_COOKIE 或 $HTTP_COOKIE_VARS[] 中訪問 Cookie,該變數儲存所有 Cookie 的名稱和值。上面的 Cookie 可以使用 $HTTP_COOKIE_VARS["name"] 訪問。
如何在 PHP 中設定 Cookie?
PHP 包含 **setcookie** 函式來建立 Cookie 物件,以便與 HTTP 響應一起傳送到客戶端。
setcookie(name, value, expire, path, domain, security);
引數
以下是所有引數的詳細資訊:
**名稱** - 設定 Cookie 的名稱,並存儲在名為 HTTP_COOKIE_VARS 的環境變數中。此變數用於訪問 Cookie。
**值** - 設定命名變數的值,它是您實際要儲存的內容。
**過期時間** - 指定自 1970 年 1 月 1 日 00:00:00 GMT 以來以秒為單位的未來時間。在此時間之後,Cookie 將變得不可訪問。如果未設定此引數,則 Cookie 將在 Web 瀏覽器關閉時自動過期。
**路徑** - 指定 Cookie 有效的目錄。單個正斜槓字元允許 Cookie 對所有目錄有效。
**域** - 可用於在非常大的域中指定域名,並且必須包含至少兩個句點才能有效。所有 Cookie 只對建立它們的宿主和域有效。
**安全** - 可以設定為 1 以指定 Cookie 應僅透過使用 HTTPS 的安全傳輸傳送,否則設定為 0,這意味著 Cookie 可以透過常規 HTTP 傳送。
示例
下面給出的 PHP 指令碼檢查名為 **username** 的 Cookie 是否已設定,如果已設定,則檢索其值。否則,將設定一個新的 Cookie **username**。
<?php if (isset($_COOKIE['username'])) { echo "<h2>Cookie username already set:" . $_COOKIE['username'] . "</h2>"; } else { setcookie("username", "MohanKumar"); echo "<h2>Cookie username is now set</h2>"; } ?>
從 Apache 伺服器的文件根目錄執行此指令碼。您應該看到以下訊息:
Cookie username is now set
如果重新執行此指令碼,則 Cookie 現在已設定。
Cookie username already set: MohanKumar
瀏覽器的開發者工具是一個非常有用的工具。您可以使用它來設定、檢索和刪除 Cookie。上述程式設定的 Cookie 可以在瀏覽器開發者工具的“應用程式”選項卡下檢視。

如下所示的 **foreach** 迴圈檢索所有 Cookie:
<?php $arr=$_COOKIE; foreach ($arr as $key=>$val); echo "<h2>$key=>$val </h2>"; ?>
以下指令碼包含一個 HTML 表單。它將表單資料傳送到 setcookie.php 指令碼,該指令碼使用從 **$_POST** 陣列檢索的資料設定 Cookie。
以下程式碼呈現 HTML 表單:
<form action="setcookie.php" method="POST"> <input type="text" name="name"> <input type="text" name="age"> <input type="submit" name="Submit"> </form>
**SetCookie.php** 讀取表單資料並設定 Cookie。
if (isset($_POST["submit"]) { setcookie("name", $_POST["name"]); setcookie("age", $_POST["age"]); }
使用另一個 getcookie.php 程式碼,我們可以檢索設定的 Cookie。
if (isset($_COOKIE["name"]) echo "Cookie: name => " . $_COOKIE["name"]. "<br>"; if (isset($_COOKIE["age"]) echo "Cookie: age => " . $_COOKIE["age"]. "<br>";
使用 PHP 訪問 Cookie
PHP 提供了許多訪問 Cookie 的方法。最簡單的方法是使用 $_COOKIE 或 $HTTP_COOKIE_VARS 變數。以下示例將訪問上述示例中設定的所有 Cookie。
<?php echo $_COOKIE["name"]. "<br />"; /* is equivalent to */ echo $HTTP_COOKIE_VARS["name"]. "<br />"; echo $_COOKIE["age"] . "<br />"; /* is equivalent to */ echo $HTTP_COOKIE_VARS["age"] . "<br />"; ?>
您可以使用 **isset()** 函式來檢查 Cookie 是否已設定。
<?php if( isset($_COOKIE["name"])) echo "Welcome " . $_COOKIE["name"] . "<br />"; else echo "Sorry... Not recognized" . "<br />"; ?>
刪除 Cookie
要刪除 Cookie,請使用已過期的日期設定 Cookie,以便瀏覽器觸發 Cookie 刪除機制。
示例
請檢視以下示例:
<?php setcookie("username", "", time() - 3600); echo "<h2>Cookie username is now removed</h2>"; ?>
瀏覽器顯示以下響應:
Cookie username is now removed
您也可以透過在 Cookie 名稱中使用陣列表示法來設定陣列 Cookie。
setcookie("user[three]", "Guest"); setcookie("user[two]", "user"); setcookie("user[one]", "admin");
如果 Cookie 名稱包含點 (.),PHP 會將它們替換為下劃線 (_)。
儘管 Cookie 概念背後的主要目的是幫助 Web 開發人員提供更個性化和便捷的使用者體驗,但它可能會對您的隱私和個人資訊構成風險。
在某些情況下,應用程式可能會拒絕您完全訪問許可權,除非您接受其 Cookie。在這種情況下,建議定期清除瀏覽器快取中與 Cookie 相關的資料。