今天我们来聊聊 JSP 中一个很常见的场景——如何用 Cookie 和 Session 实现一个简易的自动登录功能。其实思路不复杂,关键是理解浏览器关闭时 Session Cookie 和持久化 Cookie 的区别,以及它们各自的生效机制。
首先明确一个基础概念:关闭浏览器,只会让存储在客户端浏览器内存中的 Session Cookie 失效,并不会影响到服务器端的 Session 对象。而一旦你给 Cookie 设置了过期时间,它就会被保存到硬盘上,即使浏览器关闭再打开,只要没超过设定的有效期,这个 Cookie 依然有效。

接下来我们直接看代码。先写一个登录页面 login.jsp,它很简单,就是一个表单加一个提交按钮。不过这里有个细节:页面底部会读取 Session 中存储的用户名,并提示“当前用户可自动登录”。如果 Session 中不存在该值,则显示“不存在”。
<%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% //读取session值 String val= (String)session.getAttribute("name"); //如果session不存在 if(val==null){ val ="不存在"; } out.print("当前\""+val+"\"用户可自动登录"); %>登录
然后就是处理登录请求的 success.jsp。这一步的逻辑很关键:获取表单提交的用户名,如果非空,就把它存入 Session,同时新建一个同名 Cookie,并设置有效期 30 天,最后通过 response.addCookie() 发送到客户端。这样下次用户再访问时,就能通过 Cookie 找回用户名了。
<%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>主不在乎 <% //获取username String name = request.getParameter("username"); //判断用户名是否存在 if(name != null && !name.trim().equals("")){ //String[] time = request.getParameterValues("time"); //设置session值,(login页面可读取) session.setAttribute("name", name); //设置Cookie Cookie Cookie = new Cookie("name",name); Cookie.setMaxAge(30*24*3600); //设置cookie有效期为30天 response.addCookie(Cookie); //在客户端保存Cookie out.println("welcome: " + name+"欢迎登录"); } else{ response.sendRedirect("main.jsp"); } %> relogin
最后是 main.jsp,它负责展示自动登录的效果。这里需要注意的是,它先尝试从 Session 中获取用户名,但更关键的是遍历所有 Cookie,找到名为 name 的那个,取出它的值,然后输出欢迎信息。如果找不到 Cookie,则重定向回登录页。代码中还附带了一种遍历 Cookie 数组的写法,两者效果一样,可以对比着看。
<%@ page language="ja va" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>主不在乎 <% String name=(String)session.getAttribute("username"); //获取cookie Cookie[] cookies = request.getCookies(); //cookie存在 if(cookies != null && cookies.length > 0){ for(Cookie cookie:cookies){ //获取cookie的名字 String cookieName = cookie.getName(); //判断是否与name相等 if(cookieName.equals("name")){ //获取cookie的值 String value = cookie.getValue(); name = value; } } out.println("welcome again: " + name+"欢迎登录"); //************************* // 另一种写法 String v=null; for(int i=0;irelogin

运行 login.jsp 后,输入用户名登录,再点击 relogin 链接跳转到 main.jsp,就能看到自动登录的欢迎信息了。整个流程走下来,其实核心就是:Session 负责维持当前会话的登录状态,Cookie 负责跨会话持久化用户标识。两者结合,就能实现一个轻量级的“记住我”功能。
以上就是这个简易自动登录的完整实现,代码直接可用,适合刚接触 JSP 的开发者练手。希望这份梳理能帮你更好地理解 Cookie 和 Session 的协作方式。