許多登入頁面提供「記住我」勾選框,下次訪問自動填入帳號密碼。本文示範最基礎的 Cookie 實作方式:登入成功時寫入 Cookie,下次載入頁面時讀取並回填表單。
<?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>
<?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>';
?>
setcookie(..., true) 第 7 參數)。Lax 或 Strict 防禦 CSRF。參考文章 59830、59834,採用 Selector + Validator 雙 Token 機制,支援永久登入且安全可撤銷。