![e47dcf0d381853a86bf4399f25b6f9e3.png](https://i-blog.csdnimg.cn/blog_migrate/b5f3333001f35eee52b43276c7c12b06.jpeg)
很久之前面试曾经被问到一些Cookie和Session的相关知识, 当时回答的不是很好, 现在整理一下~
写于2019-4-10
需要先了解这些知识
HTTP请求是stateless(无状态)的请求, 所谓无状态, 即上一次请求和下一次请求无关联, 相互独立;
场景假设
你向服务端发起一个登录请求, 服务端校检你的账号密码之后确认你是本人并返回状态码为200的response, 客户端显示登录成功, 而过了一会儿, 你又发起一个需要登录的请求, 由于HTTP请求是无状态请求, 服务端并不知道你刚刚来过, 因此重新对你进行身份校检…你就很生气把电脑砸了!
Cookie和Session的作用
cookie和session便是为了~~让你不砸电脑~~解决这种情况而诞生的
先谈一下cookie, cookie会附带在每次的HTTP请求的请求头上, 主要用做用户标识
服务端为了让HTTP请求保留状态, 在用户进行发送登录请求并校检通过之后, 生成一个特定的序列号, 我们把它称为sessionId, 并将sessionId和对应的用户名做成映射, 保存在服务端( 作为文件保存, 或是保存在数据库, 或是其他方式... ), 并通过response将sessionId设置为用户客户端cookie; 因此, 在cookie没过期之前, 用户再次发起某个需要登录的请求, 服务端会根据请求附带的cookie(sessionId)判断出该用户之前已经进行过登录, 便不会再次进行用户身份校检~
总结
cookie保存在客户端, 一般作为用户信息标识, 附带在每次的HTTP请求的请求头中
session是一种依赖于客户端cookie的会话机制, 保存在服务端, 用于记录客户端的状态