Cookie是什么?
Cookie本质上是 浏览器 给网页提供的 本地存储数据 的机制
网页默认是不允许 访问计算机中的硬盘的(出于安全考虑),但同时我们也需要浏览器在本地能够存储一些信息.
Cookie 浏览器对于访问硬盘做出了明确的限制,相当于浏览器根据域名在本地硬盘上开辟一个Cookie大小的空间,浏览器可以在这个空间中存储信息,cookie通过键值对的方式来组织数据.
cookie从哪里来?
Cookie 是从服务器返回给浏览器的,服务器代码中由程序员决定把什么样的信息保存到客户端,通过HTTP响应的Set-Cookie字段,把键值对写回去就可以了
cookie到哪里去?
Cookie会在后续浏览器访问服务器的时候带到请求的header中,发给服务器,服务器不是只给一个客户端提供服务,同一时刻要处理多个客户端,此时服务器可以通过cookie中的值,来识别当前客户端是谁,当前客户端的服务提供到哪个环节了
Cookie常见的应用
标识用户的身份信息
session
getSession(true) 判定当前请求是否已经有对应的会话了(拿着请求中的 cookie里面的sessionId查一下哈希表),如果sessionId不存在,或者没有查到,就创建新的会话,并插入到哈希表中,如果查到了直接返回查到的结果
会话(session),就是一个键值对,key 是 sessionId,value 是一个 HttpSession 对象.每个客户端登录的时候,都会有这样的键值对(会话),服务器用哈希表这样的结果,把这些会话组织起来
getSession构造过程
1.构造一个 HttpSession 对象
2.构造唯一的 sessionId(服务器自动生成)
3.把这个键值对插入到哈希表中(服务器自动生成)
4.把 sessionId 设置到响应报文 Set-Cookie 字段中(服务器自动生成)
setAttribute(key,value)
HttpSession对象本身也是一个map的结构
Cookie和Session之间的关联
如上图所示,在网站的登录功能中,需要配合使用
Cookie和Session之间的区别
Cookie是 客户端 的存储机制,Session是 服务器 的存储机制
Cookie里面可以存各种键值对(除了身份信息,还可以存别的),Session则专门用来保存用户的身份信息
Cookie可以单独使用,不搭配session(实现非登录的场景下)
session也可以不搭配cookie使用,(手机app登录浏览器,服务器也需要session,此时没有cookie),
cookie属于 HTTP 协议的一部分
session和HTTP无关(TCP,websocket...也可以用session)