javaWeb 基础知识
cookie 深度解析: http://blog.csdn.net/ghsau/article/details/20395681
cookie 的作用:
利用存在客户端本地的缓存让无状态的服务器也能识别客户端;
cookie
既可以被服务器都写 也可以的js脚本读写; 但如果设置了HttpOnly属性; 脚本将无法读写;
javax.servlet.http.Cookie 这个类可以设置 设置cookie的名称、内容、作用路径、作用域、协议、生存周期,but不能设置HttpOnly属性 ;
但可以通过 响应头来 设置 httpOnly属性: response.setHeader("Set-Cookie", "cookiename=value;Path=/;Domain=domainvalue;Max-Age=seconds;HttpOnly");
java Cookie 的创建:
cookie的创建:
Cookie cookie = new Cookie("test_key", "test_value"); cookie.setPath("/"); cookie.setDomain(".ghsau.com"); response.addCookie(cookie);
cookie的获取:
// 输出cookies,过滤掉JSESSIONID Cookie[] cookies = request.getCookies(); if(cookies != null) { for(Cookie cookie : cookies) { if(cookie.getName().equals("JSESSIONID")) continue; out.println(cookie.getName() + "-" + cookie.getValue()); }
}
JavaScript Cookie的创建:
function setCookie(c_name, obj, expiredays) { var value = JSON.stringify(obj); // 如果穿进来是个对象;先将对象转换成json字符串; var exdate = new Date(); if(expiredays == null ) expiredays = 31; //默认cookie保存 31天; exdate.setDate(exdate.getDate() + expiredays); document.cookie = c_name + "=" + escape(value) + ";expires=" + exdate.toGMTString(); }
cookie 与 域名的关系:
1: cookie默认情况下作用域为当前域名。
2; cookie作用域为父级域名时,所有子级域名都可以得到该cookie,
3: cookie不能跨二级域名设置。
cookie 揭秘: http://www.cnblogs.com/zhangziqiu/archive/2009/08/06/cookies-javascript-aspnet.html
cookie 是如何传递的?
(1):页面 请求 ; 在请求一个页面的Http头中,会将属于此页面的本地Cookies信息加在Http头中 ;
Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee
(2) 服务器响应: 如果页面写入Cookies信息,则返回的Http如下:
Set-Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee; expires=Fri, 07-Aug-2009 03:40:59 GMT; path=/
cookie 的限制:
1: 大小: 4096 字节;
2: 个数: 每个站点 20个; 最多约 300个 ;
cookie的存储格式:
1) js: document.cookie 是一个字符串
2) java: 是一个数组;
Cookie[] cookies = request.getCookies();
cookie的内容编码格式:
Cookies的值中可以保存除了“;”以外的标点符号。但是不能保存汉字。保存汉字会出现乱码。