是什么
Cookie是服务的发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后的请求中发送给服务器,用户告知两个请求来自同一浏览器。
作用
HTTP请求是无状态的,使用Cookie可以用来保存状态信息。
例如可以用来保存Session ID
Cookie曾用作客户端数据的存储,但现在新的浏览器已经支持各种方式的本地存储,如storage API或Indexed DB,Cookie已经被淘汰了。
创建过程
服务器发送的相应报文包含Set-Cookie首部字段,客户端得到相应报文后把Cookie内容保存到浏览器中。
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: sessionID=343255390
Set-Cookie: tasty_cookie=strawberry
[page content]
客户端之后对同一个服务器发送请求是,会从浏览器取出Cookie信息并通过Cookie请求首部字段发送给服务器。
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: sessionID=343255390; tasty_cookie=strawberry
生命周期
可对Cookie设置过期时间,若不设置则默认为浏览器会话期间,关闭浏览器窗口,cookie就消失。
安全性
设置Secure=true的Cookie只能通过Https协议发送。
Cookie和Session的比较
与Cookie不同Session是保存在服务器上的。通过名为JSESSIONID的Cookie保存session id。
1.存取方式不同
Cookie只能报关ASCII字符串
Session能够存取任何类型的数据,如Java对象等
2.隐私策略不同
Cookie存储在浏览器中,对浏览器是可见的,客户端的一些程序可以查看、复制甚至修改Cookie中的内容。而Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露风险
假如使用Cookie存储账号密码等信息,最好进行加密后再存储,提交到服务器后再进行解密。
3有效期不同
Cookie可设置过期时间。默认是浏览器关闭。
Session依赖于名为JSESSIONID的cookie,而该Cookie的过期时间为-1,表示只要关了浏览器就过期,而该服务器上的对应session也就失效了。假如设置session的超时时间过程,服务器累计的Session就会越多,越容易招致内存溢出
4.服务器压力不同
Session保存在服务器上,每个用户都会产生一个session,假如并发用户十分多,会产生十分多的session,消耗大量的内存。
Cookie保存在客户端,不占用服务器资源。
5.浏览器支持不同
Cookie是需要浏览器支持的。假如浏览器禁用了cookie,则不能使用cookie
6.跨域支持上的不同
Cookie支持跨域访问。Session不支持
如果本文对您有帮助,欢迎关注我的原创微信公众号“Java技术小站”第一时间接收我的更多文章
网友评论