首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 使用 Cookie 實作「記住帳號密碼」功能

     編輯:PHP 綜合知識

許多登入頁面提供「記住我」勾選框,下次訪問自動填入帳號密碼。本文示範最基礎的 Cookie 實作方式:登入成功時寫入 Cookie,下次載入頁面時讀取並回填表單。

登入頁面 remember.php

<?php
// 預設值
$ckName = isset($_COOKIE['name']) ? $_COOKIE['name'] : '';
$ckPwd  = isset($_COOKIE['password']) ? $_COOKIE['password'] : '';
$ckRem  = isset($_COOKIE['remember']) && $_COOKIE['remember'] == 1;
?>
<form id="form1" name="form1" method="post" action="check_remember.php">
  <table width="300" border="1" align="center" cellpadding="0" cellspacing="0">
    <thead><tr><td colspan="2" align="center"><b>記住用戶名和密碼</b></td></tr></thead>
    <tr align="center">
      <td>用 戶 名:</td>
      <td><input type="text" name="name" value="<?= htmlspecialchars($ckName) ?>"></td>
    </tr>
    <tr align="center">
      <td>密碼:</td>
      <td><input type="password" name="password" value="<?= htmlspecialchars($ckPwd) ?>"></td>
    </tr>
    <tr align="center">
      <td>記住用戶名和密碼</td>
      <td>
        <input type="checkbox" name="remember" value="1" <?= $ckRem ? 'checked' : '' ?>>
      </td>
    </tr>
    <tr align="center">
      <td colspan="2"><input type="submit" name="Submit" value="提交" /></td>
    </tr>
  </table>
</form>

處理邏輯 check_remember.php

<?php
$name     = $_POST['name'];
$password = $_POST['password'];
$remember = isset($_POST['remember']) ? 1 : 0;

if ($remember) {
    // 記住 1 小時(示範用,實務建議 30 天)
    setcookie('name', $name, time() + 3600);
    setcookie('password', $password, time() + 3600);
    setcookie('remember', 1, time() + 3600);
} else {
    // 刪除 Cookie(設定過期時間為過去)
    setcookie('name', $name, time() - 3600);
    setcookie('password', $password, time() - 3600);
    setcookie('remember', 0, time() - 3600);
}
echo '<a href="remember.php">返回</a>';
?>

關鍵點與安全提醒

  • 明文儲存風險:範例直接將密碼以明文存入 Cookie,**極度不安全**,生產環境嚴禁如此做法。
  • 正確做法:
    1. 登入驗證成功後,產生隨機 Token 存入資料庫(對應 user_id、過期時間、User-Agent 等)。
    2. 將 Token 寫入 HttpOnly、Secure Cookie。
    3. 下次訪問時,讀取 Cookie Token,查詢資料庫驗證有效性並自動登入。
  • HttpOnly:防止 JavaScript 竊取 Cookie(setcookie(..., true) 第 7 參數)。
  • Secure:僅 HTTPS 傳輸 Cookie。
  • SameSite:設定 Lax 或 Strict 防禦 CSRF。

進階:記住登入狀態(而非帳密)

參考文章 59830、59834,採用 Selector + Validator 雙 Token 機制,支援永久登入且安全可撤銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved