在 Web 開發中,「記住我」或「30 天內自動登錄」是常見需求。用戶勾選複選框後,下次訪問登錄頁時自動填充用戶名和密碼,甚至直接完成登錄,極大提升用戶體驗。
// 登錄成功後
if (autoLoginChecked) {
Cookie userCookie = new Cookie("username", URLEncoder.encode(username, "UTF-8"));
Cookie passCookie = new Cookie("password", URLEncoder.encode(password, "UTF-8"));
userCookie.setMaxAge(30 * 24 * 60 * 60); // 30天
passCookie.setMaxAge(30 * 24 * 60 * 60);
response.addCookie(userCookie);
response.addCookie(passCookie);
}
// 登錄頁初始化時
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("username".equals(c.getName())) {
usernameField.setValue(URLDecoder.decode(c.getValue(), "UTF-8"));
} else if ("password".equals(c.getName())) {
passwordField.setValue(URLDecoder.decode(c.getValue(), "UTF-8"));
autoLoginCheckbox.setChecked(true);
}
}
}
生產環境切勿明文存儲密碼。建議採用以下方案:
HttpOnly 和 Secure 標誌。完整實現可參考:JavaEye 相關博客