赞
踩
一、Cookie原理
当客户端首次请求服务端时,服务端请求Cookie的JSESSIONID的KEY值。
由于HTTP协议是无记忆协议,由Web容器管理所属上下文环境Cookie(类似于JAVA中内存中维护Map结构)每次请求时,容器会把客户端Cookie传送至服务器,由容器所管理结来查找对应数据。 响应Cookie由服务端向客户端传送数据。
二、Cookie分类
(Request Cookie)请求Cookie。
(Response Cookie)响应Cookie。
三、认识Cookie
Cookie的数据结构类似于HashMap结构一样,主要是Key和Value形式。
属性包括:
Name属性 = 值 即(key =value关系)Cookie名称和值。
Expires属性 = 值 即Cookie失效时间(毫秒)。
Domain属性 = 值。即该Cookie所在域范畴。
Path属性 = 值 即该Cookie所在域下路径范畴。
HttpOnly属性 Secure属性。
即指该Cookie只能在HTTPS协议下有效,HTTP协议下不可用。
注解说明:
① Domian和Path属性就决定该Cookie有效范围,只有相同Domian和Path该Cookie才会被传送。Domain相同而path不同不会传送Cookie。Path相同而Domain不同也不会传送Cookie。② HttpOnly属性,
如果该Cookie指定为HttpOnly的话,网络传输是有效,但不JavaScript无法读取到该Cookie值,
类似于生成JSESSIONID。
四、JS脚本操作Cookie
1)获取Cookie
//获取所有
cookie var cookies = document.cookie;
2)写Cookie
document.cookie = “c3=test3”;
3)遍历Cookie
// 获取cookie值c1=test1; c2=%12%34%56%78%33%aba%20bc
//escape Js处理转码工作
//unescape Js处理解码工作
var cookies = document.cookie.split(“;”);
for (var i = 0, len = cookies.length; i < len; ++i) {
var cookie = cookies[i].split(“=”);
if (name === trim(cookie[0])) {
return unescape(trim(cookie[1]));
}
}
4)添加Cookie
//添加Cookie
//@param name 名称
//@param value 值
//@param expiresDay 失效时间(单位/天)
//@param domain 域
//@param path 域下路径
//@param isSecure https协议
function addCookie(name, value, expiresDay, domain, path, isSecure) {
var tmp = name + "=" + escape(value); if (expiresDay) { var d = new Date().getTime(); d += expiresDay * 24 * 60 * 60 * 1000; tmp += ";expires=" + new Date(d).toGMTString(); } if (domain) { tmp += ";domain=" + domain; } if (path) { tmp += ";path=" + path; if (isSecure) { tmp += ";secure"; } document.cookie = tmp;
}
5)获取Cookie
//获取Cookie
//@param name 名称
function getCookie(name) {
if(null == name || "" == name) {
return null;
}
var cookies = document.cookie.split(";");
for (var i = 0, len = cookies.length; i < len; ++i) {
var cookie = cookies[i].split("=");
if (name === trim(cookie[0])) {
return unescape(trim(cookie[1]));
}
}
return null;
}
6)删除Cookie
//删除Cookie(指定cookie失效时间,并未真实删除)
//@param name 名称
function delCookie(name) {
document.cookie = name + "="";expires=" + new Date(0).toGMTString(); }
// 去前后空格
function trim(str) {
return str.replace(/(^\s*)|(\s*$)/g, "");
}
五、JAVA程序操作Cookie
1)获取Cookie
Cookie[] cookies = request.getCookies();
2)遍历Cookie
if (cookies != null) {
for (Cookie cookie : cookies) {
System.out.println();
System.out.println("Name属性:" + cookie.getName());
System.out.println("Name对value值:" + cookie.getValue());
System.out.println("MaxAge属性:" + cookie.getMaxAge());
System.out.println("Domain属性:" + cookie.getDomain());
System.out.println("Path属性:" + cookie.getPath());
System.out.println("HttpOnly属性:" + cookie.isHttpOnly());
System.out.println("Secure属性:" + cookie.getSecure());
System.out.println();
}
}
写Cookie
// name & value Random random = new Random(); Cookie cookie = new Cookie("mycookie", random.nextInt(999999) + ""); // expires 失效时间(毫秒), -1代表失效 // maxAge 失效时间(秒), 24 * 60 * 60代表24小时 cookie.setMaxAge(-1000); // Domain 域属性 cookie.setDomain("www.baidu.com"); // Path 域下路径属性 cookie.setPath("/path2"); // HttpOnly JavaScript不能处理 cookie.setHttpOnly(false); // Secure 如果为true,仅支持HTTPS协议 cookie.setSecure(false); // 设置响应Cookie值 response.addCookie(cookie);
删除Cookie
// expires:一个过去的时间
cookie.setMaxAge(-1);
六、Cookie使用注意事项
1)过多过大的cookie浪费网络流量。
2)浏览器对cookie有个数限制。
3)浏览器对cookie有大小限制。
4)Cookie不要存储敏感信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。