跳轉至內容

PHP 程式設計/Cookies

來自 Wikibooks,開放世界中的開放書籍

Cookies 是儲存在客戶端計算機上的小型文字資料。通常,Cookie 僅用於儲存少量資料,包括使用者偏好、時間等。儘管 Cookie 本身並不有害,但有些人出於隱私方面的考慮,不允許使用 Cookie。在這種情況下,您需要使用 會話

Cookies 最初是由 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,任何其他程式碼之前。您通常只需要使用 name、value 和 expire 引數。如果沒有設定 expire,則 Cookie 將在客戶端關閉瀏覽器時過期。

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

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


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

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

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

[編輯 | 編輯原始碼]

如果伺服器在使用者的計算機上設定了一個 Cookie,那麼使用者的瀏覽器在每次頁面載入時都會將它傳送到伺服器。您伺服器傳送的每個 Cookie 的名稱都儲存在超級全域性陣列 _COOKIE 中。因此,在上面的示例中,可以透過呼叫 $_COOKIE['test'] 來檢索 Cookie。為了訪問 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/
華夏公益教科書