welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

Cookie的使用


分类 Java   关键字 分享   标签 java   web   jquery   发布 admin  1454375140552
注意 转载须保留原文链接,译文链接,作者译者等信息。  
HTTP是无状态的协议,cookie是保持会话的重要机制,也可能成为被人攻击的漏洞。

Cookie的属性如下:
name=value,cookie名称和值
maxAge=-1,-1不存储(关闭浏览器即丢失),0删除,N保存时间(秒)
domain=,.domain.com以点开头可以跨子域名,www.domain.com限定子域名,ip或留空适合本地localhost测试
path=,只有在请求此路径内的资源时才会传递cookie,/表示所有请求都会传递cookie的根路径
secure=false,true仅在https协议时传递cookie
isHttponly=false,true客户端脚本和Applet不能获取到cookie
version=0,适配旧的Netscape规范,1表示适配RFC 2109规范
comment=,注释说明,仅支持version=1时

Cookie的安全机制
1,;secure,表示只有在https协议请求时才会发送cookie信息,从而保证传输过程是安全的
2,;HttpOnly,表示JS脚本或Applet无法获取到cookie信息,从而保证本地存储是安全的

Cookie的操作
Cookie cookie=new Cookie(name, value);
cookie.setMaxAge(60);//60秒后过期
cookie.setDomain(".domain.com");
cookie.setPath("/");
//cookie.setSecure(true);
cookie.setHttpOnly(true);//建议都开启此属性
response.addCookie(cookie);

通过响应头部操作
StringBuilder cookie=new StringBuilder("name=value");
cookie.append(";Max-Age=60"); //相对过期时间60秒(IE和Firefox在处理过期时间上有差异,相对过期时间可以避免这个问题)
cookie.append(";Expires=GMT格式时间");//Date.toGMTString,或SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.US).setTimeZone(TimeZone.getTimeZone("GMT"))
cookie.append(";Domain=.domain.com");
cookie.append(";Path=/");
//cookie.append(";Secure");//Version和Comment不必设置
cookie.append(";HttpOnly");
response.setHeader("Set-Cookie", cookie.toString());

使用js脚本操作document.cookie对象(无法操作HttpOnly属性)
设置或删除cookie
document.cookie="name=value;expires=Date.toGMTString;path=/;domain=.caifuxiang.com;secure"
读取cookie
value=(arr=document.cookie.match("(^| )"+name+"=([^;]*)(;|$)"))?unescape(arr[2]):null; //中文还需要escape转码

使用jquery.cookie.js插件
value=$.cookie(name)
$.cookie(name,value,{expires:60,domain:'.domain.com',path:'/'})