跳轉到內容

PHP 程式設計/Cookie

來自華夏公益教科書,自由的教科書

Cookie 是儲存在客戶端計算機上的文字形式的小資料塊。 通常,Cookie 僅用於儲存少量資料,包括使用者偏好、時間等。 儘管 Cookie 本身無害,但有些人出於隱私方面的擔憂而禁止 Cookie。 在這種情況下,您必須使用會話

Cookie 最初由 Netscape 引入。 PHP 允許輕鬆設定和檢索 Cookie。

[編輯 | 編輯原始碼]

使用 setcookie()[1] 設定 Cookie 非常容易。

語法
 bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]])

其中 name 是 Cookie 名稱,value 是要包含在 Cookie 中的資料,expire 是 Cookie 過期的時間,path 是伺服器上可以使用 Cookie 的路徑,domain 可用於設定子域的許可權,而 secure 如果設定為 true,則僅在存在安全連線時才傳輸 Cookie。

由於所有 Cookie 都是由伺服器與HTTP 標頭一起傳送的,因此您需要在頁面開頭設定任何 Cookie,任何其他程式碼之前。 通常,您只需要使用名稱、值和過期引數。 如果未設定過期,Cookie 將在客戶端關閉瀏覽器時過期。

示例
setcookie("wikibooks", "user", time()+3600);

上面的程式碼將設定一個名為 wikibooks、值為 user 的 Cookie,並且在設定後一小時過期。


 setcookie("test", "PHP-Hypertext-Preprocessor", time()+60, "/location", 1);

這裡,setcookie 函式被呼叫了四個引數(setcookie 還有 1 個可選引數,這裡沒有使用)。 在上面的程式碼中,第一個引數是 Cookie 名稱,第二個引數是 Cookie 內容,第三個引數是 Cookie 過期的時間(以秒為單位)(time() 返回當前時間,以秒為單位,因此 time()+60 是從現在開始的一分鐘)。 路徑或位置元素可以省略,但它確實允許您輕鬆地為目錄中的所有頁面設定 Cookie,儘管通常不建議使用此方法。

您應該注意,由於 Cookie 是與 HTTP 標頭一起傳送的,因此程式碼必須位於頁面的頂部(是的,甚至在 DOCTYPE 宣告之上)。 任何其他位置都會產生錯誤。

[編輯 | 編輯原始碼]

如果伺服器在使用者計算機上設定了 Cookie,則使用者的瀏覽器每次載入頁面時都會將其傳送到伺服器。 您的伺服器傳送的每個 Cookie 的名稱都儲存在超全域性陣列 _COOKIE 中。 因此,在上面的示例中,Cookie 將透過呼叫 $_COOKIE['test'] 來檢索。 要訪問 Cookie 中的資料,我們使用 explode()[2]。 explode() 將字串轉換為帶有字串中特定分隔符的陣列。 這就是我們在 Cookie 內容中使用那些短劃線 (-) 的原因。 因此,要檢索並打印出 Cookie 中的 PHP 全稱,我們使用以下程式碼

 $array = explode("-", $_COOKIE['test']); //retrieve contents of cookie  
 print("PHP stands for " . $array[0] . $array[1] . $array[2]); //display the content

注意:$_COOKIE 在 4.1.0 中引入。 在早期版本中,使用 $HTTP_COOKIE_VARS。

Cookie 在哪裡使用?

[編輯 | 編輯原始碼]

Cookie 通常用於

  • 使用者偏好
  • 庫存
  • 測驗或投票結果
  • 使用者身份驗證
  • 記住較長時間的資料

決不應在 Cookie 中儲存未加密的密碼,因為 Cookie 很容易被其他使用者讀取。

決不應在 Cookie 中儲存關鍵資料,因為 Cookie 很容易被其他使用者刪除或修改。

參考資料

[編輯 | 編輯原始碼]
  1. https://php.net.tw/manual/en/function.setcookie.php
  2. https://php.net.tw/explode/
華夏公益教科書