YUI3:Cooke

YUI Cookie工具为与cookies交互提供了一个简单的API,包含subcookies的创建和处理。

关于HTTPOnly Cookies:暂时不支持。

使用Cookie工具

创建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(

session是保存在内存中 跟进程是同时存在的 会话cookie 但是此时服务器端还保存有session文件 需要设置时间来删除session文件

 

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".暂不研究。

读Cookies

使用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 不讨论。

删Cookies

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 });                    
});

 

Subcookies

每一个浏览器对于一个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 });                        
});

 

 

 

你可能感兴趣的:(浏览器,Yahoo,yui)