- Cookie介绍
Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。
- 特点
1.在同一个页面中设置 Cookie,实际上是按从后往前的顺序进行的。如果要先删除一个 Cookie,再写入一个 Cookie,则必须先写写入语句,再写删除语句,否则会出现错误。
2.Cookie是面向路径的。缺省路径 (path) 属性时,Web 服务器页会自动传递当前路径给浏览器,指定路径强制服务器使用设置的路径。在一个目录页面里设置的 Cookie 在另一个目录的页面里是看不到的。
3.Cookie 必须在 HTML 文件的内容输出之前设置;不同的浏览器 (Netscape Navigator、Internet Explorer) 对 Cookie 的处理不一致。
4.一个浏览器一般只准许放300个cookie
5.一个站点一般只准许放20个cookie
6.一个cookie大小限制为4kb
7.Cookie的不可跨域名性
- Cookie的创建:
Cookie cookie = new Cookie(name,value);
设置Cookie的存活时间
cookie.setMaxAge(3600);
设置Cookie的作用域
c.setPath("/");所有webapp都可以看到这个cookie
//c.setPath("/Web1")只有Web1可以看到
写出Cookie:
response.addCookie(c);
Cookie存储中文的问题(在Cookie中只能包含ASCII的编码)
转码存储:
Cookie c = new Cookie("name",URLEncoder.encode("好人", "utf-8") );
取出转码显示:
response.getWriter().print(URLDecoder.decode(ck[i].getValue(), "utf-8"));
同时别忘了设置页面的编码:response.setContentType(“text/html;charset=utf-8”);
- Cookie的修改、删除
Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。
如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。
- Cookie生存周期
Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。