session–(会话)
一、概念
session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。
二、使用和注意事项
-
session是以键值对的形式存放数据,类型为**<String,Object>**,通过getAttribute()和setAttribute()分别取数据和存数据。
-
session的创建是在需要使用到session对象时,通过request.getSession()获取当前session对象。
-
不同的客户端发送请求,如果要使用session对象,那么服务器会分别创建对应客户端的session对象。 如下图:![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]
使用案例:
- 登录成功:
if(user!=null){//登录成功
HttpSession session = request.getSession();
session.setAttribute("username",user.getUsername());
response.addCookie(CookieUtils.addCookie("username", user.getUsername(), 60 * 60 * 24 * 3));
session.setAttribute("name",user.getName());
response.addCookie(CookieUtils.addCookie("name", user.getName(), 60 * 60 * 24 * 3));
session.setAttribute("role",role);
response.addCookie(CookieUtils.addCookie("role", role, 60 * 60 * 24 * 3));
request.getRequestDispatcher("index.jsp").forward(request,response);
}else {//登录失败
HttpSession session = request.getSession();
session.setAttribute("msg","用户名或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
当用户名和密码通过验证时,创建session对象,将username、name、role存放到session的对应key中;如果没成功则存放错误信息msg。
Cookie
一、概念
HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态。Cookie 使基于[无状态](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview#http_%E6%98%AF%E6%97%A0%E7%8A%B6%E6%80%81%EF%BC%8C%E6%9C%89%E4%BC%9A%E8%AF%9D%E7%9A%84)的 HTTP 协议记录稳定的状态信息成为了可能。
二、Cookie的使用及注意事项
-
服务端可以创建cookie对象,通过setMaxAge()设置过期时间,通过addCookie()在响应中返回该cookie对象。
注意:过期时间time:正数的单位时秒,意味这它将会在未来的多少秒后过期。0代表立即过期。负数浏览器一关,默认自动删除。
-
客户端再次发送请求时,会携带该cookie到请求体中,服务器可以验证其中的信息,方便操作相关的功能。
三、使用案例:
if(user!=null){//登录成功
HttpSession session = request.getSession();
session.setAttribute("username",user.getUsername());
response.addCookie(CookieUtils.addCookie("username", user.getUsername(), 60 * 60 * 24 * 3));
session.setAttribute("name",user.getName());
response.addCookie(CookieUtils.addCookie("name", user.getName(), 60 * 60 * 24 * 3));
session.setAttribute("role",role);
response.addCookie(CookieUtils.addCookie("role", role, 60 * 60 * 24 * 3));
request.getRequestDispatcher("index.jsp").forward(request,response);
}else {//登录失败
HttpSession session = request.getSession();
session.setAttribute("msg","用户名或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
当用户登录成功后,添加username,name,role到cookie中,通过响应返回给客户端。
<%
int count = 0;
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for (Cookie cookie : cookies) {
String name = URLDecoder.decode(cookie.getName(), "UTF-8");
if ("username".equals(name)) {
count++;
}
if ("name".equals(name)) {
count++;
}
if ("role".equals(name)) {
count++;
}
}
}
String msg = (String) session.getAttribute("msg");
%>
<%if(count==3){
request.getRequestDispatcher("index.jsp").forward(request,response);
%>
前端通过判断cookie里的字段,验证通过就直接跳转到首页。
Session与Cookie的联系和区别
一、联系:
第一次请求时,如果服务器使用了session对象,那么在响应中会将JSESSIONID存入cookie,当第二次请求时,请求体会携带该cookie中的JSESSIONID到服务器。
二、区别
-
存放地址不同
cookie:存放在用户的浏览器中,每次请求时会发送给服务器。 session:存放在服务器中,第一次使用的时候才会被创建。而且一个用户会有一个唯一的session对象(Session ID)。
-
生命周期不同
cookie:可以设置过期时间,过期后会被自动删除。Cookie 的生命周期可以是会话级(浏览器关闭后删除)或持久级(设置过期时间)。
session:通常在用户关闭浏览器后失效,或者在服务器上达到一定的超时时间后失效。Session 的生命周期通常较短。
-
存储内容的区别
cookie:因为它存放在浏览器中,对于用户来说是透明的,通会对信息加密。主要存放一些用户偏好的信息,少量、非敏感的信息。 session:由于存放在服务器中。用户无法直接访问获取数据,所以通常存放需要被保护的用户状态信息。