一、如何理解 HTTP 协议是无状态的?
无状态是指无客户端状态,就是HTTP协议中服务端不会保存客户端的任何信息。
比如当浏览器第一次发送请求给服务器时,服务器响应了,如果同个浏览器发起第二次请求给服务器时它还是会响应,但是服务器不知道你就是刚才发送请求的服务器。
那么浏览器怎么记录状态呢?
两个方法:Cookie和Session。
二、Cookie 和 Session 有什么联系和区别?
2.1Cookie
Cookie是保存在客户端的一小块文本串数据。
客户端向服务器发起请求时,服务端会向客户端发送一个Cookie,客户端就把Cookie保存起来,在客户端下次向同一服务端发送请求时,Cookie被携带发送到服务器,服务端可以根据这个Cookie判断用户的身份和状态。
2.2Session
Session指的是服务器和客户端一次会话过程中另一种记录客户状态的机制。
不同的是Cookie是保存在客户端,而Session保存在服务器上。
客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端再次访问服务器上服务器从Session中查找用户状态。
2.3Cookie和Session有什么不同
2.3.1存储位置不同
Cookie保存在客户端,Session保存在服务端;
2.3.2存储数据类型不同
Cookie只能保存ASCII,Session能保存任意数类型。
一般情况下可以在Session中保存一些常用变量,例如UserId等。
2.3.3有效期不同
Cookie可设置为长时间保持,比如经常使用的默认登录功能;
Session一般有效期较短,客户但关闭或者Session超时都会失效;
2.3.4隐私策略不同
Cookie存储在客户端,比较容易被非法获取,早期有人将用户的登录名和密码存储在Cookie中导致信息被窃取;
Session存储在服务端,安全性能相对较好。
2.3.5存储大小不同
单个Cookie保存数据不超过4k;
Session可存储数据远高于Cookie。
2.4Cookie和Session有什么关联
可以使用Cookie记录Session的标识。
用户第一次请求服务器时,服务器根据用户提交的信息,创建对应的 Session,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入 Cookie 中,同时 Cookie 记录此 SessionID 是属于哪个域名。
当用户第二次访问服务器时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在,则自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到,说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。