1、为什么要有session 、cookie
http 无状态
Http 的链接是无状态的类型, 无状态就是在链接的过程中每次发送的http请求之间是无影响的。比如:第一次请求发送的是登录请求, 登录成功,之后你发送的第二次http请求并不会记录第一次登录成功的信息,此时请求之间并不能保持一定的联系。
解决会话同步
所谓会话同步,就意味着在一个浏览器的会话之中我们的请求之间应该是有联系的,即第一次的请求信息应该被候面的请求所保存,后面的请求与前面的请求之间存在联系。但是http又不能够支持保持状态, 为了解决会话同步, 即引入了 cookie 、session来保存我们的会话信息。
2、cookie
cookie 是什么
cookle 就是为了存储信息产生的,功能就是一个凭证, 用来证明请求是从一个浏览器中发出的。 它存在与客户端,也就是我们的浏览器中,那cookie是怎么产生的呢? 当我们请求服务器的时候服务器想要识别每一个客户端的话, 服务器就会产生一段小的文本信息,在http 的response中返回给客户端, 客户端会得到并保存这个cookie信息, 当下次访问的时候就会带上这个cookie信息, 以便确认自己的来源。
cookie 内容
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
- Name 和 Value 属性由程序设定,默认值都是空引用。
- Domain属性的默认值为当前URL的域名部分,不管发出这个cookie的页面在哪个目录下的。
- Path属性的默认值是根目录,即 ”/” ,不管发出这个cookie的页面在哪个目录下的。可以由程序设置为一定的路径来进一步限制此cookie的作用范围。
- Expires 属性,这个属性设置此Cookie 的过期日期和时间。
3、session
session 是什么
session 是也一种记录客户状态的机制,不同的是session 是保存在服务端的, 在一个请求当中,服务器会为当前的请求开启一段内存空间来记录当前会话下的一些操作记录, 也可以存储一些当前会话下的信息。
session 机制
服务器是如何判断客户端发送过来的亲求是属于一个会话的呢? 方式就是使用sessionId 来区别,sessioId 可以唯一标识session 。 当浏览器第一次请求服务器的时候会开辟一块session 空间,同时产生一个sessionId 并且通过响应头 set cookie 的命令使得客户端把sessionId 保存到cookie中 并且过期的时间是当前会话的时间。此后的每次请求客户端就有了带有 sessionid 的cookie , 服务器就可以从请求头中得到当前的sessionid , 当与服务器中的session id 相同的时候就可视为一次会话。
session 创建
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了sessionId,如果已包含则说明以前已经为此客户端创建过session,服务器就按照sessionId把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含sessionId,则为此客户端创建一个session并且生成一个与此session相关联的sessionId,sessionId的值是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionId将被在本次响应中返回给客户端保存。
4、小结
1、我们需要知道cookie在客户端,session在服务端,cookie的产生是在服务端产生的
2、cookie只是一个通行证,但并不是安全的,任何安全的校验必须要在服务端上完成,cookie只是存在客户端上面的一个唯一标识它且由服务端定制的信息,本地可以改,但是不管怎么改,最后还是需要把它拿上发送给服务端进行匹配校验
3、sesssion 的唯一辨识 sessionid是通过cookie的形式存储在客户端的