CREATE DATABASE userinfo;
USE userinfo;
CREATE TABLE usertbl (
ID INT AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(30) NOT NULL,
PassWord VARCHAR(20) NOT NULL,
LastLogin VARCHAR(20)
);
login.php
請註冊 或 重試";
} else {
$row = mysql_fetch_array($res);
$id = $row[0];
mysql_query("UPDATE usertbl SET lastlogin='$today' WHERE id=$id", $conn);
setcookie("usercookie", "歡迎你,$name", time()+3600); # 1小時有效
echo "登錄成功,請進";
}
?>
register.php
請登錄";
}
?>
cookie.php + welcome.php
| 缺陷 | 風險 | 修復方案 |
|---|---|---|
| SQL 直接拼接變量 | SQL 注入(繞過登錄、刪庫) | 預處理語句:mysqli_prepare/bind_param 或 PDO::prepare |
| 明文存儲密碼 | 數據洩露即裸奔 | 密碼哈希:password_hash() / password_verify() (PHP 5.5+) |
使用棄用 mysql_* 擴展 | PHP 7+ 不可用 | 遷移至 mysqli 或 PDO |
| Cookie 存儲敏感信息、無簽名 | 竄改/盜用會話 | 使用 Session (PHP 4+ 原生) + session_start(),或 JWT/簽名 Cookie |
| 無 CSRF/XSS 防護 | 表單劫持、腳本注入 | CSRF Token、htmlspecialchars() 輸出轉義 |
| 無 HTTPS | 傳輸層竊聽 | 全站強制 TLS 1.2+ |
本文展示最基礎的「能跑通」邏輯,生產環境嚴禁直接使用。學習重點在於理解「驗證→會話→授權」核心流程,實戰中請直接使用成熟框架認證組件。