欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

cookie 与 session 深度区别

程序员文章站 2024-01-20 17:00:52
...

概述:

Session 和 cookie 都是会话(Session)跟踪技术.
会话(Session)跟踪是Web程序中常用的技术, 用来跟踪用户的整个会话, 常用的会话跟踪技术是 Cookie 与 Session. Cookie 通过在客户端记录信息确定用户身份, Session 通过在服务器端记录信息确定用户身份.
项目中, 一般是登录信息放到session, 购物车的信息放在cookie.

Cookie

  1. Cookie是在客户端浏览器中记录信息确定身份
  2. cookie数据存放在客户的浏览器上
  3. 单个cookie保存的数据不能超过4k, 一般浏览器都限制一个站点最多保存20个cookie.
  4. cookie不是很安全, 别人可以分析存放在本地的COOKIE 并进行cookie欺骗, 若要考虑到安全应当使用session, 或者要对cookie 加密处理.
  5. 购物车一般使用cookie, 但是cookie是可以在客户端禁用的, 这时候我们要使用 cookie+数据库的方式实现, 当从 cookie中不能取数据时候, 就从数据库获取.

注意:

  1. cookie 以键值对的形式存储信息在浏览器
  2. cookie 不能跨域, 当前及其父级域名可以取值
  3. cookie 可以设置有效期
  4. cookie 可以设置 path

设置一个cookie : 在登录controller里使用cookie工具类设置, 并且将cookie加密即可

Session

  1. Session是在服务器端记录信息确定身份.
  2. Session的实现依赖于cookie, sessionId(session的唯一标识需要存放在客户端)
  3. Session数据放在服务器上.
  4. Session 会在一定时间内保存在服务器上, 当访问量增多, 会比较占用服务器内存的性能, 考虑到要增加服务器性能, 应该使用 cookie.
  5. 登录等重要的信息存在session中, 某些信息仅仅是需要保留, 则可以放到cookie中(购物车信息).

注意:

  1. 基于服务器内存的缓存, 是非持久化的, 如果服务器重启或者宕机, 该服务器的所有会话信息都会丢失, 他是有状态的session, 所以在往后的项目一般不会使用了, 会使用无状态的分布式session来取代.
  2. 每个session 通过sessionId 来区分不同的请求
  3. session 也是以键值对的形式存在的
  4. session 可以设置过期时间

案例: 设置 一个 session 会话 (前端的若是html页面则是使用不了的, jsp 能行)

@GetMapping("/setSession")
public Object setSession(HttpServletRequest request){
	HttpSession session = request.getSession();
	session.setAttribute("userInfo","new user");   // 设置一个session
	session.setMaxInactiveInterval(3600);  // 设置过期时间, 设置为 0 表示永不过时
	session.getAttribute("userInfo");  // 根据session的键来得到该session的值
	// session.removeAttrubute("userInfo");  // 手动移除这个session
	return "ok";
}