关于session和cookie

廉价感情. 提交于 2019-12-15 00:54:40

说到session和cookie,想必大家都不会陌生,正巧前些天看了一些这方面的知识,所以结合自己的理解,整理记录一下,希望能对小伙伴有些帮助。

1.产生原因

在B/S架构中,通常是用http请求的形式来进行前后端(或者说客户端与服务端)的交互,但问题就来了,HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态(这也是其保持较快的响应速度的原因),所以当多个用户同时请求到服务器的时候,服务器到底应该怎么区分不同的用户呢。所以,能不能让用户请求服务器的时候,服务器给该用户一个独一无二的凭证,这样用户下次请求的时候每次都带上这个凭证(就好比每次都要输入密码),然后服务端根据凭证信息就可以知道是谁发起了请求,这样的话,就可以正确区分不同的用户了。基于这种思想,session和cookie就这样产生了。

2.是什么?

  • session
    基于上面的策略,客户端和服务端都应该需要存储凭证的地方,一个用于发送凭证,一个是收到凭证后在凭证库中查找并核对。所以,理所当然地应该分为两个部分。session就主要是在服务器端工作,服务器会为每个用户创建一个session并放在服务器中,这个session就叫会话。
  • cookie
    cookie自然就是在用户本地工作,是存在用户本地的电脑上的由一个个键值对构成的字符串,它可以持久存储。客户端每次发送请求,就会将cookie的值存放在请求头并发送给服务端。

3.session和cookie的联系

客户端第一次向服务端发送请求的时候,客户端的cookie为空,服务端接收到客户端发来的请求后,先查看cookie中有没有JSESSIONID这一项,如果没有,则认为是这个客户端对应的用户是第一次请求,所以会生成一个新的JSESSIONID来对应该用户,如下图的Response Headers中的Set-Cookie项,这代表着给前端返回JSESSIONID,从此之后该用户的请求就会带着这个JSESSIONID,凭此来证明自己的身份。
在这里插入图片描述可以看到之后发送的请求的Request Headers中的cookie都带有刚刚的JSESSIONID,而且是同一个,并且不会产生新的ID。
在这里插入图片描述
可以说,session的机制的实现必须要借助cookie这个载体,通过cookie承载session的id,达到sessionid从客户端到服务端的传递,从而实现了不同会话的跟踪(最近比较流行的token凭证也是相同的原理,比如jwt)。但反过来则不一样,cookie不需要依赖于session,它可以传递其它任何需要的键值对到服务端,服务端有专门的方法获取。

4.session安全规范

5.其它补充

  1. 后台给前端设置cookie的方法是response.setCookie(cookie),需要注意以下两个方法。

    cookie.setMaxAge(); //若不设置该项,则每次关闭浏览器就清除cookie,和session的生命周期保持一致。
    cookie.setPath(); //默认值是/,即项目域名根目录下,若设置为/demo ,则只有域名下/demo地址才能获取到该cookie

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!