Cookie与Session的工作流程

Cookie与Session的工作流程

  • 一、为什么有Cookie和Session?
  • 二、cookie/session执行流程
    • 2.1 cookie执行流程
    • 2.2 Session的执行流程
  • 三、Session/Cookie的区别

一、为什么有Cookie和Session?

由于HTTP协议是“无状态”协议(可以参考之前的博客HTTP协议),也就是客户端向服务器端发送请求,服务器作出响应,他们之间的连接就会断开(一次会话结束),下次客户端再给服务器端发送请求,服务器就不知道这个用户是谁了。

但是在实际的开发中,我们需要知道请求之间的关联关系的。在这个背景下,就需要一种机制来解决这个问题。从上面的问题我们分析,客户端在每次访问服务器时需要从客户端你带上一些数据(类似身份证)来告诉服务器自己是谁。cookie机制应运而生。

有了cookie,那session又是用来做什么的呢?cookie是向服务器证明用户身份的,那么用户的详细信息(姓名、年龄、性别)我们是否应该存储在某个位置供页面调用呢?存储在cookie中吗?但是cookie是存储在客户端的,将用户的详细信息存储在客户端通过网络连接发送给服务器端是很不安全的,我们会通过抓包工具截取到用户信息。并且cookie大小不能超过4k,不能支持中文。因此就需要一种机制在服务器端的某个位置存储这些数据,session机制应运而生。

总结:cookie/session机制就是为了解决HTTP无状态协议的问题,为了让客户端和服务器端能够建立长久联系出现的。

二、cookie/session执行流程

2.1 cookie执行流程

当访问服务器时,服务器会设置一个cookie,在响应时会通过set-cookie将cookie带给浏览器,浏览器收到后将此数据保存起来,下次去访问浏览器时,请求头都会带上cookie信息,来到服务器,服务器获取到请求头中的cookie信息,获取名称JSESSIONID的值,从而验证用户的身份。
Cookie与Session的工作流程_第1张图片

下面用登录gitee作为示例:

  1. 登录时保存在浏览器cookie中的内容:
    Cookie与Session的工作流程_第2张图片

Cookie与Session的工作流程_第3张图片
Cookie与Session的工作流程_第4张图片

  1. 登录后访问自己的仓库:
    可以在访问的请求头的cookie中看到登录时保存在浏览器中的cookie信息。
    Cookie与Session的工作流程_第5张图片
    Cookie与Session的工作流程_第6张图片
    Cookie与Session的工作流程_第7张图片

这也就说明了我们上面讲的cookie的工作机制。

2.2 Session的执行流程

浏览器发起一个请求到服务器,服务器先检查是否携带了一个叫做JSEESIONID的Cookie。

如果有携带,会将此cookie值取出来(比如abc),然后从服务器的session池中找到ID为abc的session返回给调用者。
如果没有携带JSESSIONID 这个Cookie,服务器就会自动创建一个session对象并且生成一个随机字符串(abc)作为此sessionID保存到session池中,在服务器为客户端响应时会自动创建一个键为“JSESSIONID”,值为“abc”的cookie对象让浏览器存储起来,以便下次访问的时候带着。

三、Session/Cookie的区别

  • Cookie是客户端的机制,Session是服务器端的机制。
  • Cookie不能跨域名访问(不能用百度颁发的证明去访问搜狗)。
  • Cookie不是很安全,且保存数据有限。
  • Session一定时间保存在服务器上,当访问增多,会占用服务器性能。

你可能感兴趣的:(Java,Web,服务器,http,https)