- 会话:用户打开浏览器,访问浏览器资源,会话建立,直到一方断开连接,会话结束,一次会话中可以包含多次请求和响应。
- 会话跟踪技术:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自同一浏览器,以便在同一次会话的多次请求间共享数据。
- 会话跟踪方案:
- 客户端会话跟踪技术:Cookie
- 服务端会话跟踪技术:Session
- 令牌技术
Cookie
流程如下:
存储在客户端浏览器,当浏览器第一次发起请求时,服务端设置一个Cooike响应给客户端,在Cooike中存储信息,服务端在给客户端响应数据时,会自动将Cooike响应给浏览器,浏览器在接受服务端响应的数据时,会自动将Cooike存储在本地,在接下来的每一请求中,都会自动将浏览器存储的Cooike自动的携带到服务端,服务端可以判断Cooike的值是否存在。
是一种HTTP协议中支持的技术
详情请访问:
https://cloud.tencent.com/developer/section/1189930
@RestController
public calss SessionController{
//设置Cookie
@GetMapping("/c1")
public ResultVO cookie(HttpServletResponse response){
response.addCookie(new Cookie("username","张三"));//设置Cookie / 响应Cookie
return ResultVO.ok();
}
//获取Cookie
@GetMapping("/c2")
public ResultVO cookie2(HttpServletRequest request){
Cookie[] cookies = request.getCookies(); //获取所有的Cookie
for(Cookie cookie : cookies){
if(cookie.getName().equals("username")){
System.out.print("username:"+cookie.getValue());
}
}
return ResultVO.ok();
}
}
请求c1,服务端设置的Cookie
请求c2时,客户端传递的Cookie
cookie 的优缺点
优点:极高的扩展性和可用性
1、通过良好的编程,控制保存在cookie和session中的对象的大小。
2、通过加密和传输技术(ssl),减少cookie被破解的可能。
3、只在cookie中存放不敏感数据,即使被盗取也不会造成太大损失。
4、控制cookie的存放有效时间,偷盗者有可能拿到的是一个过期的数据。
缺点:
1、cookie的长度和数量的限制,同一个domain下只能存放20条,每条4kB,否则会被截掉。
2、安全性问题,如果cookie被截取,截取者就能获取session的信息,即使被加密也于事无补,因为截取者只需要原样发出cookie就能达到目的。
3、有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
Session
session是基于Cookie实现的
流程如下:
- 用户输入其登录信息
- 服务器验证信息是否正确,并创建一个session,然后将其存储在数据库中
- 服务器为用户生成一个sessionId,将具有sesssionId的Cookie将放置在用户浏览器中
- 在后续请求中,会根据数据库验证sessionID,如果有效,则接受请求
- 一旦用户注销应用程序,会话将在客户端和服务器端都被销毁
//往HttpSession中存储值
@GetMapping("/s1")
public ResultVO session1(HttpSession session){
log.info("HttpSession:{}",session.hashCode());
session.setAttribute("username","lisi");//往session中存储数据
return ResultVO.ok();
}
//从HttpSession中获取数据
@GetMapping("/s2")
public ResultVO session2(HttpServletRequest request){
HttpSession session = request.getSession();
log.info("s2的HttpSession:{}",session);
Object user = session.getAttribute("username"); //从session中获取数据
log.info("user:{}",user);
return ResultVO.ok();
}
请求s1时,服务器设置的Session对象
请求s2时,浏览器传递Session的对象
Session的优缺点
优点:
他能在整个应用中帮助维护用户状态和数据。
他能让我们简单地实现存储任何类型的对象。
独立地保存客户端数据。
对于用户来说,Session是安全的、透明的。
缺点:
因为Session使用的是服务器的内存,所以在用户量大的时候会成为性能瓶颈。
在序列化和反序列化的过程中他也会成为性能瓶颈,因为在StateServer(状态服务)模式和sql server模式下我们需要对我们存储的数据进行序列化和反序列化我们所存储的数据。
Session和Cookie的区别
1、cookie存客户端,session存服务端。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。