js设置cookie,为cookie中设置多个key value

一下是犀牛书中实现的操作cookie的api

function cookieStorage(maxage, path) {
    var cookie = (function() {
            var cookie = {};
            var all = document.cookie;
            if(all == "")
                return cookie;
            var list = all.split(";");
            for(var i=0; i<list.length;i++){
                var cookie = list[i];
                var p = cookie.indexOf("=");
                var name = list[i].substring(0,p);
                var value = list[i].substring(p+1);
                value = decoudeURIComponent(value);
                cookie[name] = value;
            }
            return cookie;
        }());
    var keys = [];
    for(var key in cookie)
            keys.push(key);
    this.length = keys.length;

    this.key  = function(n){
        if(n<O||n>keys.length)
            return null;
        return keys[n];
    };

    this.getItem = function(name){
        return cookie[name]||null;
    };

    this.setItem = function(key, value){
        if(!(key in cookie)){
            keys.push(key);
            this.length++;
        }

        cookie[key] = value;

        var cookie = key +"="+encoudeURIComponent(value);
        if(maxage) cookie += ";max-age="+maxage;
        if(path) cookie += ";path="+path;
        document.cookie = cookie;
    };
    this.removeItem = function(key){
        if(!(key in keys)) return;
        delete cookie[key];

        for(var i=0;i<cookie.length;i++){
            if(keys[i]===key){
                keys.splice(i,1);
                break;
            }
        }
        this.length--;
        document.cookie = key+"=;max-age=0";
    };
    this.clear = function(){
        for(var i=0;i<keys.length;i++){
            document.cookie = key+"=;max-age=0";
        }
        cookie = {};
        keys=[];
        this.length=0;
    };
}

在看到setItem这里我很疑惑,最后它直接定义一个新的cookie然后document.cookie = cookie;
这样难道不会覆盖之前的值吗,怎么设置多个key和value;
是这样的:
要改变cookie的值,需要使用想呕吐那个的名字、路径和域,但是新的值重新设置cookie的值。
要删除一个cookie,需要使用相同的名字、路径和域,然后指定一个任意(非空)的值,并将max-age属性值指定为0,在此设置cookie。


cookie的局限性:
1.IE6一下最多20个cookie
2.IE7和之后可以有50个cookie
3.FF之后可以有50个cookie
4.chrome和safari没有硬性限制
IE和opera会清理近期最少使用的cookie,FF会随机清理cookie。
cookie的最大大于为4094字节,每个domain最多只能有20条。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值