Cookie 和 Session 工作流程

1.为什么需要Cookie 和 Session

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

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

那既然我们知道了cookie是拿来证明用户身份信息的,那么session是用来干什么的呢?

我们虽然有cookie来表明用户的身份信息,但是他的详细信息比如性别年龄等我们在需要使用的时候该从哪里获取呢? cookie是存储在客户端的将用户的详细信息存储在客户端通过网络连接发送给服务器端是很不安全的,我们会通过抓包工具截取到用户信息。并且cookie大小不能超过4k,不能支持中文。因此就需要一种机制在服务器端的某个位置存储这些数据,session机制应运而生。

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

2.cookie/session执行流程

2.1 cookie执行流程

在我们首次访问服务器是会发送Request请求,而服务器在响应时会通过set-cookie将cookie带给浏览器,浏览器就会将cookie保存到本地。下次去访问浏览器时,请求头都会带上cookie信息,来到服务器,服务器获取到请求头中的cookie信息,获取名称JSESSIONID的值,从而验证用户的身份。

Cookie 和 Session 工作流程_第1张图片 

 2.2 session执行流程

创建会话


1.首先先获取到请求中 cookie 里面的 sessionId字段,相当于会话的身份标识
2.判定这个 sessionId 是否在当前服务器上存在。
3.如果不存在,则进入创建会话逻辑


会创建一个 HttpSession 对象,并且生成一个 sessionId(是一串很长的十六进制数,保证唯一性)
接下来就会把这个 sessionId 作为 key,把这个 HttpSession 对象作为 value,把这个键值对保存到服务器内存的一个“哈希表”这样的结构中。
最后,服务器就会返回一个 HTTP 响应,把 sessionId 通过 Set-Cookie 字段返回给浏览器。浏览器就可以保存这个 sessionId 到 Cookie 中了。


获取会话


先获取到请求中的 cookie 里面的 sessionId 字段(也就是会话的身份标识)
判定这个 sessionId 是否在当前服务器上存在(也就是在这个"哈希表"中是否有)
如果有,就直接查询出这个 HttpSession 对象,并且通过返回值返回回去。

HttpSession这个对象本质上也是一个“键值对”结构,允许程序员往 HttpSession 对象中储存任意的键值对结构(key 必须是 String,value 是一个 Object) 。

Cookie 和 Session 工作流程_第2张图片

3.Session/Cookie的区别 

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

你可能感兴趣的:(服务器,java,前端)