JAVA操作Cookie

Cookie是什么
Cookie是网站为了识别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

Cookie 常用来保存少量的、简单的数据,一般不允许超过4KB(与浏览器设置也有关系),使用期限可以进行灵活设定,保存于用户浏览器所设定的目录内。由于信息存储在客户端,最好不要保存敏感数据(例如,密码、银行账号等)。可以保存以下信息: 用户的浏览记录、上次访问时间等内容。同时需要注意客户端用户有可能会关闭 Cookie。

IE浏览器中Cookie的设置
如果您使用的是IE 6.0版本,可以按照以下几个步骤启用/禁用cookie:
(1)点击菜单条上的”工具”(Tool);
(2)在展开的菜单里,选择最下面一条”Internet选项”(Internet Options);
(3)在打开的Internet 选项设置窗口里,顶上有一条标签栏,点击第三个”隐私”(Privacy);
(4)在”隐私”的设置里,中间偏下有三个按钮,点击第二个按钮”高级”(Advanced);
(5)在弹出的cookie设置窗口里,勾选如下设置:
覆盖自动cookie处理
第一方cookie:接受/阻止/提示
第三方cookie:接受/阻止/提示
总是允许会话cookie (Always allow session cookies)
点击按钮”确定”(OK),关闭cookie设置窗口
点击按钮”确定”(OK),关闭Internet 选项设置窗口

IE浏览器中Cookie的查看
如果您使用的是IE 6.0版本,可以按照以下几个步骤启用/禁用cookie:
(1)点击菜单条上的”工具”(Tool);
(2)在展开的菜单里,选择最下面一条”Internet选项”(Internet Options);
(3)在打开的Internet 选项设置窗口里,顶上有一条标签栏,点击第三个”常规”;
(4)在”浏览历史记录”,一栏中点击“设置”;
(5)在打开的新窗口中点击“查看文件”即可。

==========================
java对cookie操作的支持
Servlet API中有一个Cookie类:javax.servlet.http.Cookie 。该类对cookie的使用进行了封装,并包含了一些额外的属性以帮助程序员更好的使用cookie。使用cookie一般分为两个步骤:
(1)创建cookie并设置其值;
(2)读取cookie中所设置的值。
一旦我们以某个域名或者网址的名义(比如:www.darkmi.com)在客户端设置了cookie,那么每次访问该域名或者网址的时候,请求中都会包含该cookie。

Cookie类的常用方法:

1.设置Cookie

Cookie cookie = new Cookie("key", "value");
cookie.setMaxAge(60); //设置60秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。
cookie.setPath("/test/test2"); //设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分)
response.addCookie(cookie);

2.读取Cookie

该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,如果没有任何Cookie的话,则返回null
Cookie[] cookies = request.getCookies();

3.删除Cookie

Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0); //设置为0为立即删除该Cookie
cookie.setPath("/test/test2"); //删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
response.addCookie(cookie);

4.修改Cookie
首先读取cookie
Cookie[] cks = request.getCookies();
for (int i = 0; i < cks.length; i ++){
  Cookie cookie = cks[i];
  if (cookie.getName().equalsIgnoreCase("cookiename")){
cookie.setValue("newvalue"); 设置新的值
        response.addCookie(cookie);
   }
}

5.注意:假设路径结构如下

/

/test

/test/test2

/test345

/test555/test666

a.相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下。

b. 删除时,如果当前路径下没有键为"key"的Cookie,则查询全部父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie)

FF.必须指定与设定cookie时使用的相同路径来删除改cookie,而且cookie的键名不论大写、小写或大小混合都要指定路径。

IE.键名小写时,如果当前路径为/test/test2,如果找不到再向上查询/test、/test555、/test345,如果还找不到就查询/ 。(/test555/test666不查询)

键名大小写混合或大写时,不指定路径则默认删除当前路径,并且不向上查询。

c.读取Cookie时只能读取直接父路径的Cookie。

如果当前路径为/test/test2,要读取的键为"key"。当前路径读取后,还要读取/test,/test读取后,还要读取/

d.在做Java的web项目时,由于一般的Web服务器(如Tomcat或Jetty)都用Context来管理不同的Web Application,这样对于每个Context有不同的Path,

在一个Server中有多个Web Application时要特别小心,不要设置Path为/的Cookie,容易误操作。(当然前提是域名相同)

你可能感兴趣的:(java,Web,浏览器,servlet,IE)