

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
我们会从Cookie的基础原理讲起,拆解它如何在登录场景中存储用户信息;再一步步带你写代码:从前端登录页的“记住我”勾选框,到后端如何生成、读取Cookie,再到下次访问时自动填充账号密码的逻辑。更重要的是,我们会提醒你最容易忽略的安全细节——比如如何加密Cookie里的敏感信息,避免用户数据泄露。
不管你是刚接触JSP的新手,还是想优化项目登录体验的开发者,跟着这篇教程走,就能快速掌握用Cookie提升登录效率的方法,让你的网站更懂用户需求,告别重复输入的麻烦。
你是不是也烦透了?每次打开常逛的网站,明明昨天刚登过,今天又得重新输账号密码——尤其是密码设得又长又复杂的时候,输错一次就得重来,麻烦得要命。其实我去年帮朋友改他那个小电商网站的登录功能时,就用JSP的Cookie解决了这个问题,现在他的用户都说“登录变懒了,但是爽了”。今天我就把当时的实操过程拆开来给你讲,不用懂太多复杂的后端知识,跟着步骤走就能做出来。
先把Cookie在登录里的逻辑理清楚,别上来就写代码
我发现很多新手做功能的时候,总爱“先写代码再想逻辑”,结果越写越乱——比如去年朋友那个网站,他一开始自己试着重写登录功能,把Cookie和Session的逻辑混在一起,导致用户登录后要么一直不掉线,要么动不动就被迫退出。后来我帮他理逻辑的时候,先画了张流程图,才把事儿搞明白。
先给你用大白话解释:Cookie就是网站存在你浏览器里的“小纸条”——比如你第一次登录时,网站在纸条上写点你的信息(比如账号、加密后的密码),然后塞给浏览器“帮我存着”;等你下次访问,浏览器就把这张纸条带过去,网站一看“哦,是之前来过的人”,就自动帮你填账号密码或者直接登录了。
但记住啊,“记住密码”和“自动登录”不是一回事——我当时一开始没分清楚,直接把自动登录的逻辑套到“记住我”上,结果用户勾选“记住我”之后直接跳过登录页,吓得朋友赶紧让我改回来。给你掰扯清楚:
还有个小经验要告诉你:一定要给用户明确的“有效期提示”。我当时帮朋友加“记住我”勾选框时,一开始只写了“记住我”,结果很多用户不敢勾——怕“记住一辈子,万一电脑被偷了怎么办”。后来改成“记住我(7天内免输密码)”,勾选率直接涨了30%——用户得知道“这个功能管多久”,才敢放心用。
手把手教你写代码:从前端到后端的完整流程
光理逻辑没用,得动手写代码——我把去年帮朋友做的流程拆成“前端表单→后端生成Cookie→读取Cookie填充→自动登录”四步,每一步都给你写清楚,不用怕看不懂。
第一步:前端登录页先加“记住我”的勾选框
你得在登录表单里加个checkbox
,名字叫rememberMe
,一定要把有效期写清楚。比如JSP页面里的代码可以这么写:
这里要注意两个点:
name="rememberMe"
要和后端接收的参数名一致,不然后端拿不到值; id="rememberMe"
要和label
的for
对应,用户点文字也能勾选——我当时没加这个,朋友说“很多用户点文字没反应,以为功能坏了”,后来加上就好了。 第二步:后端Servlet处理登录,生成Cookie
当用户点“登录”按钮后,请求会发到loginServlet
——这一步的核心是“验证账号密码→如果勾选‘记住我’,就生成Cookie存到浏览器”。
先给你看loginServlet
的核心代码(我简化了数据库验证的部分,你换成自己的UserService
就行):
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//
取前端参数
String username = request.getParameter("username");
String password = request.getParameter("password");
String rememberMe = request.getParameter("rememberMe"); // 取值是"true"或null
//
验证账号密码(换成你自己的Service方法)
User user = userService.login(username, password);
if (user == null) {
// 登录失败,跳回登录页提示错误
request.setAttribute("errorMsg", "账号或密码错误");
request.getRequestDispatcher("login.jsp").forward(request, response);
return;
}
//
如果勾选了“记住我”,生成Cookie
if ("true".equals(rememberMe)) {
// 3.1 加密密码(重要!绝对不能存明文)
String encryptedPwd = MD5Util.encode(password); // 自己写个MD5工具类,或者用hutool的
// 3.2 生成Cookie:存username和加密后的password
Cookie usernameCookie = new Cookie("username", URLEncoder.encode(username, "UTF-8"));
Cookie pwdCookie = new Cookie("password", URLEncoder.encode(encryptedPwd, "UTF-8"));
// 3.3 设置Cookie的有效期(7天)、路径、HttpOnly
int maxAge = 60 60 24 7; // 秒数,7天
usernameCookie.setMaxAge(maxAge);
pwdCookie.setMaxAge(maxAge);
usernameCookie.setPath("/"); // 根路径,整个网站都能访问
pwdCookie.setPath("/");
usernameCookie.setHttpOnly(true); // 防止JS读取,安全!
pwdCookie.setHttpOnly(true);
// 3.4 把Cookie发给浏览器
response.addCookie(usernameCookie);
response.addCookie(pwdCookie);
} else {
// 没勾选,删除之前的Cookie(如果有的话)
deleteCookie(response, "username");
deleteCookie(response, "password");
}
//
登录成功,跳转到首页
response.sendRedirect("index.jsp");
}
// 删Cookie的工具方法(把有效期设为0)
private void deleteCookie(HttpServletResponse response, String name) {
Cookie cookie = new Cookie(name, "");
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
}
这里要划几个重点:
HttpOnly
属性:这个属性能防止JS读取Cookie,避免XSS攻击——我当时就是看了W3C的 才加的,后来朋友的网站被扫漏洞时,这个设置帮他挡住了一次攻击; /
:我一开始没设,结果只有访问登录页时才能读取Cookie,访问首页时读不到——查了半天才知道,Cookie的默认路径是当前页面的路径,必须设成根路径,整个网站才能用。 第三步:下次登录时,读取Cookie自动填充表单
用户下次访问登录页时,浏览器会把Cookie带过来——我们要做的是“把Cookie里的username和password取出来,填到输入框里”。
在login.jsp
的开头加一段代码,放在标签前面:
<%
//
取浏览器带过来的Cookie
Cookie[] cookies = request.getCookies();
String username = "";
String password = "";
if (cookies != null) {
for (Cookie cookie cookies) {
if ("username".equals(cookie.getName())) {
username = URLDecoder.decode(cookie.getValue(), "UTF-8"); // 解码
}
if ("password".equals(cookie.getName())) {
password = URLDecoder.decode(cookie.getValue(), "UTF-8");
}
}
}
%>
<!-
把取到的值填到输入框里 >
<input type="text" name="username" id="username" value="" required>
<input type="password" name="password" id="password" value="" required>
>
这里有个小技巧:如果Cookie里有值,自动勾选“记住我”——用就能实现。我当时加了这个之后,朋友说“用户觉得‘网站懂我’,体验更好了”。
第四步:再加个自动登录功能,让用户更“懒”
如果想做自动登录,逻辑和记住密码差不多,但要存“登录状态标识”而不是密码——比如存一个加密后的userId
和token
,有效期设短一点(比如3天)。
我当时帮朋友加的自动登录代码是这样的:
在loginServlet
的“登录成功”部分加一段代码:
// 如果勾选了“自动登录”(假设前端加了个autoLogin的checkbox)
index.jspString autoLogin = request.getParameter("autoLogin");
if ("true".equals(autoLogin)) {
// 生成token(比如用userId+时间戳加密)
String token = MD5Util.encode(user.getId() + System.currentTimeMillis());
// 存token到数据库(或者Redis),有效期3天
userService.saveAutoLoginToken(user.getId(), token, 3);
// 生成自动登录的Cookie:存userId和token
Cookie autoLoginCookie = new Cookie("autoLogin", URLEncoder.encode(user.getId() + ":" + token, "UTF-8"));
autoLoginCookie.setMaxAge(60 60 24 3);
autoLoginCookie.setPath("/");
autoLoginCookie.setHttpOnly(true);
response.addCookie(autoLoginCookie);
}
每次访问网站时,验证自动登录的Cookie: 在
或者
base.jsp的开头加一段代码,放在所有内容前面:
jsp
<%
//
先检查用户有没有登录(用Session) User loginUser = (User) session.getAttribute("loginUser");
if (loginUser != null) {
// 已经登录过,直接跳首页
response.sendRedirect("index.jsp");
return;
}
//
取自动登录的Cookie Cookie[] cookies = request.getCookies();
String autoLoginValue = "";
if (cookies != null) {
for (Cookie cookie cookies) {
if ("autoLogin".equals(cookie.getName())) {
autoLoginValue = URLDecoder.decode(cookie.getValue(), "UTF-8");
}
}
}
//
解析Cookie里的userId和token if (!autoLoginValue.isEmpty()) {
String[] parts = autoLoginValue.split(":");
if (parts.length == 2) {
String userId = parts[0];
String token = parts[1];
//
验证token是否有效(查数据库或Redis) User user = userService.getByAutoLoginToken(userId, token);
if (user != null) {
// 登录成功,把用户信息存到Session里
session.setAttribute("loginUser", user);
// 跳首页
response.sendRedirect("index.jsp");
return;
}
}
}
%>
注意:自动登录的Cookie一定要设短有效期,并且定期更新token——我当时帮朋友设的是3天,并且每次自动登录成功后,都会重新生成新的token——这样即使Cookie被截获,也只能用3天,风险小很多。
最后再给你避3个坑,别踩我踩过的雷
我去年帮朋友做的时候,踩了3个大坑,差点把功能搞崩——现在告诉你,别再犯:
坑1:Cookie里别存敏感信息,尤其是明文密码
我当时一开始没加密,结果朋友的测试账号密码被我用浏览器的“开发者工具”直接看到——吓得我赶紧改成MD5加密。记住:Cookie是存在用户浏览器里的,任何人都能看到,所以绝对不能存明文密码、身份证号这种敏感信息。
坑2:Cookie的有效期别设太长
朋友一开始想把“记住我”设为30天,我劝他改成7天——后来有个用户电脑丢了,因为Cookie只有7天有效期,没造成太大损失。有效期越长,风险越大, “记住我”设7天,自动登录设3天,足够用了。
坑3:退出登录时一定要删Cookie
很多人做功能时,只做了“登录生成Cookie”,没做“退出删除Cookie”——结果用户点“退出”后,Cookie还在,别人用他的浏览器还是能自动登录。退出登录的Servlet里一定要加删Cookie的代码,比如:
java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 清空Session
session.invalidate();
// 删除登录相关的Cookie
deleteCookie(response, “username”);
deleteCookie(response, “password”);
deleteCookie(response, “autoLogin”);
// 跳回登录页
response.sendRedirect(“login.jsp”);
}
最后说两句:功能做出来,还要让用户放心
我帮朋友做完这个功能之后,他的用户留存率涨了15%——很多用户说“本来嫌登录麻烦不想再来了,现在能直接进,就常来了”。但你要记住,功能好用是一方面,让用户放心更重要:
你要是按照我讲的步骤做,遇到问题可以在评论区问我,或者加我微信发代码截图——我帮你看看哪里错了。等你做完了,也记得回来告诉我效果怎么样,让我也高兴高兴~
对了,给你附个Cookie常用属性的表格,方便你查:
属性名 | 作用 | 示例值 |
---|---|---|
name | Cookie的名称,比如”username” | username |
value | Cookie存储的值,需要URL编码 | URLEncoder.encode(“admin”, “UTF-8”) |
maxAge | Cookie的有效期(秒),0表示删除,-1表示会话结束后删除 | 606024*7(7天) |
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com