YUI Cookie工具为与cookies交互提供了一个简单的API,包含subcookies的创建和处理。
关于HTTPOnly Cookies:暂时不支持。
很简单:
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y) { Y.Cookie.set("name", "value"); });
这个例子创建了一个叫做"name"值为"value"的cookie。因为这个cookie所有的设置都是默认的,所有它也是一个会话cookie(
)
set()有第三个参数,它用来创建一个长期的cookie,你也可以通过提供一个Date对象来指定截止时间。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y) { Y.Cookie.set("name", "value", { expires: new Date("January 12, 2025") }); });
你可以通过设置路径或者域名信息来限制cookie的访问。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y) { Y.Cookie.set("name", "value", { path: "/", //所有页面都可以访问 domain: "yahoo.com" //yahoo.com以及其他yahoo.com下的页面都可以访问 }); });
"path","domain"参数不一定要全部设置,也可以独立设置。
最后一个可选参数是"secure",它指出cookie只能用HTTPS协议,通过SSL来访问。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ Y.Cookie.set("name", "value", { secure: true }); });
一个更高级的可选参数:"raw".暂不研究。
使用get()方法获取cookies(必须是当前页面可以访问的),如果cookie不存在,get()返回null
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ var value = Y.Cookie.get("name"); });
这个例子中获取的名为"name"的值。默认情况下,get()将返回字符串(cookie存在)或者null(cookie 不存在)。你可以通过第二个参数改变返回值。例如为了返回数字,你可以传递一个Number()函数。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ var value = Y.Cookie.get("age", Number); });
这这个代码中,返回值是数字类型的(如果cookie不存在,返回值依然为null)。还有其他函数Boolean(),Date。或者你也可以自定义你的转换函数:
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ var value = Y.Cookie.get("code", function(stringValue){ return parseInt(stringValue, 16); //转换成16进制。 }); });
转换函数只接受一个参数——cookie值,也必须返回一个值。如果cookie不存在,转换函数不会执行。
a raw cookie 不讨论。
remove()方法有两个参数:要删除的cookie名和一个可选的cookie选项对象。一个创建时用指定选项创建的对象,删除时也只能用同样的选项。例如,一个用yahoo.com domain属性创建的cookie也只能被yahoo.com domain选项删除。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ //delete the cookie named "code" Y.Cookie.remove("code"); //delete the cookie named "info" on the "yahoo.com" domain Y.Cookie.remove("info", { domain: "yahoo.com" }); //delete a secure cookie named "username" Y.Cookie.remove("username", { secure: true }); });
每一个浏览器对于一个domain都有一个限制数,这对于一个有很多子网站的domian会出现问题。因为cookie的名值对一般都不会超过所限制的比特数,所有可以在一个cookie里面存储多个subcookies。
一个subcookie有如下格式:
cookiename=name1=value1&name2=value2&name3=value3
setSub()方法来设置subcookies.有四个参数:cookie name,subcookie name,subcookie value,一个可选的配置对象。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ //set a cookie named "name" with a subcookie named "subname" whose value is "value" Y.Cookie.setSub("name", "subname", "value"); //set a second subcookie on "name", with a name of "subname2" and a value of "value2" Y.Cookie.setSub("name", "subname2", "value2"); //set subcookie on the "yahoo.com" domain Y.Cookie.setSub("info", "age", 22, { domain: "yahoo.com" }); //set subcookie to a secure cookie named "user" Y.Cookie.setSub("user", "name", "ace123", { secure:true }); });
setSubs()设置所有的subcookie内容。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ var data = { name: "ace123", age: 22, track: true }; //set a cookie named "user" with subcookies Y.Cookie.setSubs("user", data); });
注意:setSubs方法会完全重写cookie
获取subcookie值的两个方法:
getSub(),转换函数同上面的get();
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ //get subcookie var stringValue = Y.Cookie.getSub("name", "subname"); //get subcookie and convert to number var numberValue = Y.Cookie.getSub("user", "age", Number); //get subcookie and convert from hex code to decimal number var integerValue = Y.Cookie.getSub("settings", "bgcolor", function(stringValue){ return parseInt(stringValue, 16); //create a number from a hexadecimal code }); });
第二个方法是:getSubs();
它只有一个参数:cookie的name
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ //get all subcookies var data = Y.Cookie.getSubs("name"); var subValue = data.subname; //get all subcookies var user = Y.Cookie.getSubs("user"); var userName = user.name; });
删除subcookies:removeSub();
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ //set subcookie on the "yahoo.com" domain Y.Cookie.setSub("info", "age", 22, { domain: "yahoo.com" }); //remove the subcookie Y.Cookie.removeSub("info", "age", { domain: "yahoo.com" }); });
在默认情况下,如果subcookies全部删除了,主cookie依然存在,如果想在主cookie为空时删除主cookie,则指定一个removeIfEmpty选项。
//create a YUI instance and use the cookie module. YUI().use('cookie', function(Y){ //remove the subcookie Y.Cookie.removeSub("info", "age", { removeIfEmpty: true }); });