一cookie是什么?
1.Cookie:是服务器端传给客户端的体积很小的纯文本文件
作用:简单的理解为,用户去商场买东西,商场发给用户的卡片。
下次用户去商场带上这张卡片,卡片上有用户的信息
(购物记录、积分等)。Cookie就类似于这张卡片的作用。
二 Cookie的作用
最根本的用途是Cookie 能够帮助 Web站点保存有关访问者的信息,也就是在不同的网页之间保持会话状态的保持能力,因为HTTP是无状态的。
Cookie 的作用就类似于名片,它提供了相关的标识信息,可以帮助应用程序确定如何继续执行。
2.1 Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续。
2.2 另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
2.3 高级应用,某家航空公司站点查阅航班时刻表,该网站可能就创建了包含你旅行计划的Cookies,在你下次访问时,网站根据你的情况对显示的内容进行调整,将你所感兴趣的内容放在前列。
三 Cookie的产生与机制
1.Cookie的生成,示例(java代码)
Cookie cookie = new Cookie(“key”,”value”);
cookie.setMaxAge(60); //设置cookie的生存期60秒
cookie.setPath(“/test”);//设置cookie的路径,不设置为当前路径 // 对于servlet来说为request.getContextPath()+web.xml里配置的servlet的url-pattern路径部分
response.addCookie(cookie);//将cookie随着响应返回给客户端
2.Cookie是如何把信息带给服务端的?
浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。
3.服务器端获得cookie的方法:
Cookies[] cookies = request.getCookies();//获得所有的cookie
四 Cookie的属性
HttpCookie类代表cookie。当创建或读取一个cookie时,可以使用该类的下面这些属性:
Domain——用于设置关联到cookie的域名,默认值是当前域名;
Expires——用于通过给定一个过期时间创建一个持久化cookie;
HasKeys——用于指定该cookie是否是一个多值cookie(见本章稍后的3.1.6节);
HttpOnly——用于避免cookie被JavaScript访问;
Name——用户指定cookie的名称;
Path——用于指定关联到cookie的路径。默认值为/;
Secure——用于指定cookie需要通过安全Socket层(SSL)连接传递;
Value——允许读/写cookie的值;
Values——当使用多值cookie时,用于读/写特定的值(见本章稍后的3.1.6节)。
五 Cookie属性说明
说明:Domain属性对于组织子域名时会非常有用。如果需要设置cookie可以被Sales.MyCompany.com,Managers.MyCompany.com和Support.MyCompany.com访问,则需要设置 Domain属性值为.MyCompany.com(注意开头的部分),而不能使用该属性关联cookie到一个完全不同的域名。
HttpOnly属性用户设置一个cookie是否可以通过JavaScript访问。该属性只对IE6(SP1)级以上版本有效。引入该属性是为了防止跨站点脚本攻击。
六 cookie的生命周期和存储
1.Cookie主要包括:名字,值,过期时间,路径和域
路径与域一起构成cookie的作用范围
2.Cookie的生命周期:
根据生命周期分为两种类型cookie:会话cookie和持久cookie
会话cookie:如果不设置过期时间,表示这个cookie的生命期为浏览器的会话期间,关闭浏览器窗口,cookie就消失了。会话cookie一般保存在内存里。
持久cookie:设置了过期时间,浏览器会把cookie保存在硬盘上。存储在硬盘上的cookie会在不同的浏览器进程间共享。
保存在内存里的cookie,不同的浏览器有不同的处理方式
3.Cookie在硬盘的存储位置:
Winxp :
Ie中 Internet选项->常规->当前位置中 以cookie:开头的文件
七 Cookie的删除与使用
1.要删除一个存在的cookie,必须设置其过期时间为一个过去的时间。
2.HttpCookie.HasKey属性判断一个cookie是一个普通cookie还是一个多值cookie。
八 不同浏览器的cookie的限制
1.InternetExplorer8增加cookie限制为每个域名50个
IE7似乎也允许每个域名50个cookie
2.Firefox每个域名cookie限制为50个。
3.Opera每个域名cookie限制为30个。
4.还有些浏览器会对来自所有站点的 Cookie总数作出限制,这个限制通常为 300 个。
不同浏览器间cookie总大小也不同:
Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。
Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。
InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。
九 当很多的cookie被设置,浏览器如何去响应
InternetExplorer和Opera:
当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间
Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)
十 Cookie的安全性与不安全性
10.1 cookie是安全的
a. cookie是文本文件,不是可执行文件,不会像病毒那样的可执行文件。
b. cookie不会多的塞满你的硬盘,浏览器有一定得清理机制清理。
c.在传输过程中防止被篡改,可以对 Cookie的属性进行设置,使其只能在使用安全套接字层(SSL,又称https://)的连接上传输
d.不同的浏览器将cookie存于不同的位置,cookie是浏览器独立的,
使用IE浏览器请求页面并创建的cookie,不存在于Firefox或Opera浏览器中。
e.所有的cookie是域名独立的。Amazon网站设置的cookie,巴诺书店网站访问不到。浏览器创建一个cookie时,会记录关联到cookie的域名,不会将其发送到另一个域名。
10.2 cookie是不安全性
a . 持久cookie存在客户的机器里,cookie可以被篡改,具有不安全性。
b.千万不要在 Cookie中保存保密信息 - 用户名、密码、信用卡号等等,如果要放这些信息,就需要加密处理
c.尽管cookie没有病毒那么危险,但它仍包含了一些敏感信息:用户名,计算机名,使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。这并非危言耸听,一种名为Crosssite scripting的工具可以达到此目的。
d.利用安全机制,攻击者加入代码从而改写cookie内容,以便持续攻击。
e.httpOnly 指定 Cookie是否可通过客户端脚本(js)访问,true则不可访问