Cookie / Session
2018-09-25 本文已影响4人
小凡凡520
也协作Cookies、通常用于web端记录用户身份。
工作流程
1、客户端发送一个http请求到服务器端
Cookie由服务器端生成(定义)并记录保存
2、服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
客户端保存Cookie
3、客户端发送一个http请求到服务器端,其中包含Cookie头部
4、服务器端发送一个http响应到客户端
确认用户身份(权限)以返回不同的资源

用途
Cookie在一定程度上解决了http无状态的缺陷。
特点
- 不可跨域
域名www.google.com颁发的Cookie不会被提交到域名www.baidu.com去。一二级域名可设置是否互通。 - Cookie的有效期
有效期可设置。负数为临时Cookie、0为失效。 - 中文编码
中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码。
缺陷
不利于隐私的保护
查看Cookie
控制台输入javascript:alert (document. Cookie)即可。
Session
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
-
Session的有效期
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。 -
Session与Cookie
1、虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。 2、Cookie和Session的方案虽然分别属于客户端和服务端,但是服务端的session的实现对客户端的Cookie有依赖关系的,上面我讲到服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是Cookie,因此当我们完全禁掉浏览器的Cookie的时候,服务端的session也会不能正常使用。