PHP cookie 教學

作者 Kelvin Huang

Cookie 是一種用於在客戶端儲存小量資訊的技術。當用戶訪問一個網站時,網站可以向用戶的瀏覽器發送一個 Cookie,用戶的瀏覽器會將這個 Cookie 儲存在本地的電腦上。當用戶再次訪問網站時,瀏覽器會將這個 Cookie 傳回給網站,網站可以根據這個 Cookie 判斷用戶的身份、記錄用戶的設置等。

在 PHP 中可以使用 setcookie() 函數來設置 Cookie,語法如下:

setcookie(name, value, expire, path, domain, secure, httponly);

setcookie() 函數的參數分別是:

name:設定 Cookie 的名稱

value:設定 Cookie 的值

expire:設定 Cookie 的過期時間,一般是 Unix 時間戳,表示從 1970 年 1 月 1 日 0 時 0 分 0 秒開始到現在的秒數。

path:設定 Cookie 的作用路徑,表示這個 Cookie 在哪些路徑下有效。

domain:設定 Cookie 的作用域名,表示這個 Cookie 在哪些域名下有效。

secure:布林值,設定此 Cookie 是否只能在 HTTPS 協議下傳輸。

httponly:布林值,設定此 Cookie 是否只能通過 HTTP 或 HTTPS 協議傳輸,無法通過 JavaScript 等客戶端腳本來訪問。

 

以下是一個使用 setcookie() 函數設置 Cookie 的例子:

<?php
// 設置一個名為 "username" 的 Cookie,有效時間為一個小時
setcookie("username", "Kelvin", time()+3600);

// 讀取 Cookie 的值
echo "使用者名稱:" . $_COOKIE['username'];
?>

 

以上範例使用 setcookie() 函數設置了一個名為 username 的 Cookie,值為 Kelvin,有效時間為一個小時。

然後使用 $_COOKIE['username'] 讀取 Cookie 的值並在網頁上顯示。

注意! 如果在 setcookie() 函數之後立即讀取 $_COOKIE 陣列,可能無法獲取到剛才設置的 Cookie,因為瀏覽器還沒有將這個 Cookie 傳回。

 

 

以下範例的第一個網頁提供表單讓訪客輸入名稱,按下「確認」按鈕後先將名稱儲存到 Cookie ,然後前往第二個網頁並可顯示訪客名稱,如果訪客先前沒有輸入過名稱,而輸入網址直接進入第二個網頁,則出現「新朋友?歡迎光臨!」的文字。設定 Cookie 過期時間為一年。

這是第一個網頁★

以上程式先檢查是否有 POST 資料提交,如果有則將名稱儲存到 Cookie 中,然後使用跳轉到 welcome.php 網頁。

這是第二個網頁 welcome.php 。

以上的程式使用 setcookie() 函數將名稱儲存到 Cookie 中,並指定了一年後過期。在第二個網頁中,我們使用了 $_COOKIE 超全域變數來讀取 Cookie 中的名稱。注意,Cookie 中的資料可以被使用者手動清除,所以不能完全依賴 Cookie 中的資料來識別用戶身份,需要配合其他方式,例如 Session 等。

執行結果:

 

 

將密碼改為儲存在外部的 txt 文字檔

<?php
$password_file = 'password.txt';
$password = file_get_contents($password_file);

if (isset($_POST['password']) && $_POST['password'] == $password) {
// 如果使用者已輸入密碼,且密碼正確,則顯示網頁內容
echo "<h1>歡迎光臨</h1>";
echo "<p>這是一個受密碼保護的網頁</p>";
} else {
// 如果使用者還未輸入密碼或密碼錯誤,則顯示密碼輸入表單
echo "<h1>請輸入密碼</h1>";
echo "<form method='post'>";
echo "<label for='password'>密碼:</label>";
echo "<input type='password' id='password' name='password'>";
echo "<button type='submit'>確認</button>";
echo "</form>";
}
?>