目录
一:客户端与服务端请求与响应的关系
客户端请求服务器端,属于HTTP请求。Http请求是无状态的,即每次服务端接收客户端请求时,都是一次全新的请求,服务器端并不知道客户端的历史请求记录,所以当用户从客户端请求登录后,登陆成功,再一次请求时,因为服务端不能区分这两次请求是否来自同一个浏览器,所以服务端不知道客户端的请求历史记录,就会再次弹出登录的会话框。
为了解决客户端与服务端请求会话同步的问题,这便引出了Session与Cookie的概念。
于是我们把服务端产生的会话Session存储在客户端浏览器的Cookie中去。
二:Session是什么
1.客户端请求服务端,服务端会为这次请求开辟一块内存空间,
这个对象便是Session对象, 存储结构为ConcurrentHashMap。
session的目的:弥补HTTP无状态特性,服务器可以利用session存储客户端在同一个会话期间的一些操作记录。
2. 客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。每个用户访问服务器都会建立一个session,那服务器是怎么标识用户的唯一身份呢?事实上,用户与服务器建立连接的同时,服务器会自动为其分配一个SessionId。
三:Cookie是什么
1.一个HTTP cookie的(网络Cookie,浏览器cookie)是一小片数据的一个服务器发送到用户的网络浏览器。浏览器可以存储它并将其与下一个请求一起发送回同一服务器。通常,它用于判断两个请求是否来自同一个浏览器 - 例如,保持用户登录。它记住无状态 HTTP协议的有状态信息。
2. Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下客户端再向服务端发起请求时,客户端会自动在请求报文中加入Cookie值之后发送出去,之后服务端发现客户端发送过来的Cookie后,会检查是那个客户端发送过来的请求,然后对服务器上的记录,最后得到了之前的状态信息。
四:Session与Cookie的区别
1、Session存储在服务器端;Cookie存储在客户端
2、Session存储在内存中;Cookie存储在内存或硬盘中
3、Session的安全性较高;Cookie的安全性较低
4、Session可以存储较大的数据;Cookie存储的数据量较小(10K)
5、Session的读取效率较高;Cookie的读取效率较低
五:工作原理图