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

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

程序员文章站 2022-03-11 16:36:55
...

由来

  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保存信息

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

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

Java学习笔记(八)--Session和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个
相关标签: HTTP