Java学习笔记(八)--Session和Cookie

由来

  HTTP是无状态协议,它不对之前发生过的请求和响应的状态进行管理,即无法根据之前的状态进行本次的请求处理。当登录一个系统时,因为是无状态的则登录系统后每次请求一个新的web页面不是每次都需要重新登录,就是需要在每个请求报文中附加参数来管理登录状态。

  • 无状态协议优点:不必保存状态,因此可减少服务器的CPU及内存资源消耗。
  • 无状态协议缺点:在每次请求的时候服务端都需要判断这是谁发来的请求,也会造成服务端的一些负担,为解决此类问题,引入了Cookie机制和Session机制。

Cookie

  • 是什么:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据
  • 实现机制:Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会动在请求报文中加入 Cookie 值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

  ①后端给前端返回Cookie要求客户端保存Cookie信息

Cookie cookie = new Cookie("rewardsn",""); // 新建Cookie
Cookie cookie = new Cookie("Path","/"); // 新建Cookie
response.addCookie(cookie); // 输出到客户端

  ②前端接收到response信息后根据Set-Cookie保存信息


③保存信息后,之后的请求会自动带上Cookie



  • Cookie特性:Cookie有不可跨域名性,每个网站都会为客户端颁发Cookie,这样谷歌不会携带百度的Cookie,百度不会携带谷歌的Cookie。

Session

  • 是什么:是一次浏览器和服务器的交互会话
  • 实现机制:服务端产生sessionId,返回给客户端,客户端会将sessionId存储在客户端的cookie中,在服务端的服务器上也会存储一份sessionId,用来客户端和服务端进行比较,确认本次会话是哪个用户的请求。
  • 使用:涉及到分布式的部署方案,如果采用Session方式保存状态,则需要设置Session共享,如果部署的服务器多的时候可能会引起网络风暴,因此一般采用和redis搭配,可参考:https://blog.csdn.net/jerome_s/article/details/52658946
  • tomcat中设置session过期时间(默认为20分钟),在tomcat的web.xml中修改时间即可:
<session-config>
   <session-timeout>60</session-timeout>      <!-- 单位:分钟 -->
</session-config>

区别

  • Cookie存放在客户端,Session存放在服务器上
  • cookie因为放在客户端,所以存在修改欺骗,相对不安全,session放在服务器上,相对来讲比较安全
  • session放在服务器上,当会话增加,会消耗服务器资源
  • 有一些网站对cookie有限制,有时会限制不超过20个

猜你喜欢

转载自blog.csdn.net/zh15732621679/article/details/79700944