1、Cookie
1.1
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
1.2 使用步骤
1.2.1 创建cookie对象
new Cookie(String name, String value)
//创建一个Cookie
Cookie cookie = new Cookie("username", "user01");
1.2.2 发送Cookie对象
(默认cookie的有效时间是整个浏览器关闭后才会销毁,哪怕服务器重启也不会没掉)
response.addCookie(Cookie cookie)
//发送Cookie,把Cookie加入到响应数据当中
resp.addCookie(cookie);
或者
resp.setHeader("set-cookie","username=9999");
1.2.3 获取cookie对象,拿到数据
Cookie[] cookies = request.getCookies()
1.2.4 设置Cookie时效(单位:秒)
哪怕浏览器关闭了、电脑关闭了,只要时间没到,cookie就不会销毁
正数:cookie数据写入磁盘中,持久化存储 cookie.setMaxAge(60)。
cookie.setMaxAge(60)
负数:默认,当浏览器关闭的时候,cookie被销毁。
0:删除cookie信息。
//给软件自动登录(保存之前登录过的账号密码) //在用户第一次访问的时候登录到后端,后端给前端浏览器一个Cookie,有登录的信息以及到期时间 //在之后的每次打开软件的时候,浏览器像后端发起的所有接口会带上登录信息这个Cookie
Cookie cookie = new Cookie("username", "user01");
//设置Cookie的到期时间
cookie.setMaxAge(60);
// 发送Cookie,把Cookie加入到响应数据当中
resp.addCookie(cookie);
2. Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。
2.1 工作原理
Session是依赖于Cookie的,当服务端创建session时,服务端在响应的时候会通知客户端把seesion id存储在cookie,后续的请求会在请求头里面会携带上cookie中的数据,服务端获取cookie携带的session id之后从session映射区里面获取对应的数据进行其他的操作。
2.2 使用步骤
2.2.1. 获取session对象
HttpSession session = request.getSession();
2.2.2. 设置数据
session.setAttribute(键, 值);
2.2.3 手动设置JSESSIONID,可以设置cookie时效性
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60);
response.addCookie(cookie);
2.3 cookie和session的区别
1. session用于存储一次会话的多次请求的数据,存在服务端。
2. session可以存储任意类型,任意大小的数据。
3. session数据存在服务端,cookie存在客户端。
4. session没有数据大小限制,cookie有(一般是2K)。
5. session数据安全,cookie相对不安全。
3. Filter过滤器
访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊功能。比如可以用于完成通用的操作,如:登录验证、统一编码处理、敏感字符过滤等等。
1. 定义一个类,实现接口javax.servlet.Filter。
2. 重写方法。
3. doFilter方法实现通用操作。
4. 配置拦截路径。
第一种:web.xml配置
第二种:使用注解
@WebFilter("路径")
//全部接口都拦截
@WebFilter("/*")
//放行
filterChain.doFilter(servletRequest,servletResponse);