> 文章列表 > 【Cookie、Session、Token】与【Request、Response】

【Cookie、Session、Token】与【Request、Response】

【Cookie、Session、Token】与【Request、Response】

一、Request、Response简单介绍

Request是浏览器请求头,请求头有什么信息,Request就有什么信息。
Response是浏览器响应头,响应头有什么信息,Response就有什么信息。

二、cookie、session、token的流程

1. cookie的流程

(数据保存在浏览器)
【Cookie、Session、Token】与【Request、Response】

2. session的流程

(数据保存在服务器,sessionID保存在浏览器)
【Cookie、Session、Token】与【Request、Response】
【Cookie、Session、Token】与【Request、Response】

3. token流程

(数据跟token经过加密在浏览器,服务器保存加密的密钥)
【Cookie、Session、Token】与【Request、Response】

三、cookie、session、token的使用

1. cookie的简单使用示例

服务器将Cookie添加到浏览器

// 设置Cookie的key-value
Cookie cookie1 = new Cookie("username","Adam");
// 设置Cookie的有效时间,以秒为单位
cookie1.setMaxAge(60 * 60 * 24);
// 设置路径:cookie.setPath(“/项目名/路径”),这样设置只有访问“/项目名/路径”下的的资源才会携带 Cookie
cookie1.setPath(getServletContext().getContextPath() + "/");
// 通过response响应,在浏览器中添加的Cookie
response.addCookie(cookie1);

服务器读取浏览器发来的Cookie

// 从request中获取所有cookie
Cookie[] cookies = request.getCookies();
// 遍历Cookie
for(Cookie c : cookies){// 获取cookie的键值对String cookieKey = c.getName();String cookieValue = c.getValue();System.out.println("CookieKey:" + cookieKey + ",CookieValue:" + cookieValue);
}

2. session的简单使用示例

// 在请求头中根据sessionID获取对应的session
HttpSession session = request.getSession();
// 向session中添加键值对key-value
session.setAttribute("username", username);
// 从session中得到key对应的属性值
String username1 = session.getAttribute("username");
// 设置最长访问间隔时间
session.setMaxInactiveInterval(60*60*24);
// 删除session中对应的属性
session.removeAttribute("username");
// 获取sessionID
String id = session.getId();
// 使session立即无效
session.invalidate();

3. token的简单使用示例

token的工具类

public class TokenUtil{// 根据传进来的user的属性来生成Tokenpublic String generateToken(User user){// 获取现在的时间Date start = new Date();// 设置一小时有效时间long currentTime = System.currentTimeMillis() + 60 * 60 * 1000;		Date end = new Date(currentTime);// 生成tokenString token = "";token = JWT.create().withAudience(user.getId().toString()).withAudience(user.getUsername()).withIssuedAt(start).withExpiresAt(end).sign(Algorithm.HMAC256(user.getPassword()));// 返回tokenreturn token;}// 获取制定token中某个属性值public static String get(String token, String key) {List<String> list= JWT.decode(token).getAudience();String userId = JWT.decode(token).getAudience().get(0);return userId;}// 获取tokenpublic String getToken(HttpServletRequest request) {Cookie[] cookies = request.getCookies();for (Cookie c :cookies) {if (c.getName().equals("token")) {return c.getValue();}}return null;}
}

服务器生成Token并添加到浏览器的Cookie中

public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@AutowiredTokenUtil tokenUtil;public R loginCheck(User user, HttpServletResponse response){User user2 = userMapper.selectByName(user.getUsername());if(user2 == null){return R.error().message("该用户不存在!");}if(!user2.getPassword().equals(user.getPassword())){return R.error().message("密码错误!");}// 获取tokenString token = tokenUtil.generateToken(user2);// 将token放在Cookie中Cookie cookie = new Cookie("token", token);// 将token的Cookie保存到浏览器中response.addCookie(cookie);}	
}