1.什么是COOKIE?
答:COOKIE是用于在客户端存储会话信息的。
2.COOKIE的组成部分?
①名称:一个唯一确定COOKIE 的名称。建议区分大小写。COOKIE 的名称必须是经过URL 编码的。
②值:储存在COOKIE 中的字符串值。值必须被URL 编码。
③域:COOKIE 对于哪个域是有效的。所有向该域发送的请求中都会包含这个COOKIE 信息。这个值可以包含子域(subdomain,如www.wrox.com),也可以不包含它(如.wrox.com,则对于wrox.com的所有子域都有效)。如果没有明确设定,那么这个域会被认作来自设置COOKIE 的那个域。
④路径:对于指定域中的那个路径,应该向服务器发送COOKIE。例如,你可以指定COOKIE 只有从http://www.wrox.com/books/ 中才能访问,那么http://www.wrox.com 的页面就不会发送COOKIE 信息,即使请求都是来自同一个域的。
⑤失效时间:表示COOKIE 何时应该被删除的时间戳。默认情况下,浏览器会话结束时即将所有COOKIE 删除;不过也可以自己设置删除时间。这个值是个GMT 格式的日期(Wdy, DD-Mon-YYYY HH:MM:SS GMT),用于指定应该删除COOKIE 的准确时间。因此,COOKIE
可在浏览器关闭后依然保存在用户的机器上。如果你设置的失效日期是个以前的时间,则COOKIE 会被立刻删除。
⑥安全标志:指定后,COOKIE 只有在使用SSL 连接的时候才发送到服务器。例如,COOKIE 信息只能发送给https://www.wrox.com,而http://www.wrox.com 的请求则不能发送COOKIE。
3.列举一个COOKIE的例子?
以下是一个完整的COOKIE的例子,我们将把它分解开来:
Set-COOKIE: name=value; expires=Mon, 22-Jan-07 07:10:24 GMT; domain=.wrox.com; path=/; secure
①名称: name字符串表示
②值:value字符串表示
③过期时间:Mon, 22-Jan-07 07:10:24 GMT
④域名:.wrox.com
⑤路径:当前目录/
⑥安全标志:secure
4.如何操作COOKIE?
var COOKIEUtil = { // 设置COOKIE set : function (name, value, expires, domain, path, secure) { var COOKIEText = ""; COOKIEText += encodeURIComponent(name) + "=" + encodeURIComponent(value); if (expires instanceof Date) { COOKIEText += "; expires=" + expires.toGMTString(); } if (path) { COOKIEText += "; path=" + path; } if (domain) { COOKIEText += "; domain=" + domain; } if (secure) { COOKIEText += "; secure"; } document.COOKIE = COOKIEText; }, // name=value; expires=expiration_time; path=domain_path; domain=domain_name; secure // 获取COOKIE get : function (name) { var COOKIEName = encodeURIComponent(name) + "=", COOKIEStart = document.COOKIE.indexOf(COOKIEName), COOKIEValue = ""; if (COOKIEStart > -1) { var COOKIEEnd = document.COOKIE.indexOf (";", COOKIEStart); if (COOKIEEnd == -1) { COOKIEEnd = document.COOKIE.length; } COOKIEValue = decodeURIComponent(document.COOKIE.substring(COOKIEStart + COOKIEName.length, COOKIEEnd)); } return COOKIEValue; }, // 删除COOKIE unset : function (name, domain, path, secure) { this.set(name, "", Date(0), domain, path, secure); } }; // 测试 COOKIEUtil.set("name", "zhang"); var name = COOKIEUtil.get("name"); alert(name); // zhang COOKIEUtil.unset("name"); alert(COOKIEUtil.get("name")); // 空
5.COOKIE的限制
①存储数据数量有限
②保了储存在COOKIE 中的信息只能让批准的接受者访问,而无法被其他域访问
③安全性有限
6.针对COOKIE数据存储少量的问题,我们提出了子COOKIE的概念。即在每条COOKIE的值中存储多条数据,用"&"隔开。
var SubCOOKIEUtil = { /** 设置一条完整的COOKIE * param name : 表示COOKIE的名称,必填 * param subCOOKIEs : 表示COOKIE的值,为一个对象,必填 * param expires : 表示COOKIE的过期时间,可以不填 * param domain : 表示COOKIE的域名,可以不填 * param path : 表示COOKIE的路径,可以不填 * param secure : 表示COOKIE的安全标志,可以不填 * eg : SubCOOKIEUtil.setAll("info", { name : "zhang", age : 23}); **/ setAll : function (name, subCOOKIEs, expires, domain, path, secure) { var COOKIEText = "", subName, COOKIEParts = []; COOKIEText += encodeURIComponent(name) + "="; for(subName in subCOOKIEs) { COOKIEParts.push(encodeURIComponent(subName) + "=" + encodeURIComponent(subCOOKIEs[subName])); } if (COOKIEParts.length > 0) { COOKIEText += COOKIEParts.join("&"); if (expires instanceof Date) { COOKIEText += "; expires=" + expires.toGMTString(); } if (path) { COOKIEText += "; path=" + path; } if (domain) { COOKIEText += "; domain=" + domain; } if (secure) { COOKIEText += "; secure"; } } else { COOKIEText += "; expires=" + Date(0).toGMTString(); } document.COOKIE = COOKIEText; }, /** 设置一条子COOKIE * param name : 表示COOKIE的名称,必填 * param subName : 表示子COOKIE的名称,必填 * param value : 表示子COOKIE的值,必填 * param expires : 表示COOKIE的过期时间,可以不填 * param domain : 表示COOKIE的域名,可以不填 * param path : 表示COOKIE的路径,可以不填 * param secure : 表示COOKIE的安全标志,可以不填 * eg : SubCOOKIEUtil.set("info", "sex", "boy"); **/ set : function (name, subName, value, expires, domain, path, secure) { var COOKIEs = this.getAll(name) || {}; COOKIEs[subName] = value; this.setAll(name, COOKIEs, expires, domain, path, secure); }, /** 读取一条完整COOKIE * param name : 表示COOKIE的名称,必填 * return : 一个COOKIE对象 * eg : SubCOOKIEUtil.getAll("info"); **/ getAll : function (name) { var COOKIEName = encodeURIComponent(name) + "=", COOKIEStart = document.COOKIE.indexOf(COOKIEName), COOKIEValue = "", i, len, subCOOKIEs, parts, result = {}; if (COOKIEStart > -1) { var COOKIEEnd = document.COOKIE.indexOf (";", COOKIEStart); if (COOKIEEnd == -1) { COOKIEEnd = document.COOKIE.length; } COOKIEValue = decodeURIComponent(document.COOKIE.substring(COOKIEStart + COOKIEName.length, COOKIEEnd)); if (COOKIEValue.length > 0) { subCOOKIEs = COOKIEValue.split("&"); for (i = 0, len = subCOOKIEs.length; i
以上就是本文的全部内容,希望对大家的学习有所帮助。