js 액세스 쿠키

6393 단어 자바 scriptcookie
js 액세스 쿠키
정규 표현 식 이 일치 할 때 일치 하지만 false 인 경우:
해결:
정규 매 칭 전역 후 lastIndex 1 이 추 가 됩 니 다. 다음 매 칭 은 2 위 부터 시작 합 니 다. 테스트 에 1 명 밖 에 없 기 때문에 매 칭 실패, 매 칭 실패 후 lastIndex 0 이 됩 니 다. 다음 매 칭 은 1 위 부터 매 칭 성공... 제거 /g 하거나 수 동 으로 reg.lastIndex=0encodeURIComponent 를 진행 하지 않 았 습 니 다.
해결:
정규 표현 식 new RegExp(_name + "=([^;]*)(;|$)") 동적 으로 값 정 보 를 일치 시 켜 데이터 의 완전 성 을 확보 합 니 다.마지막 으로 반드시 () 의 방식 으로 연산 을 해 야 한다. 그렇지 않 으 면 문제 가 생 길 수 있다.
(function (root, factory) {
    //        
    if (typeof define === "function" && define.amd) {
        define([], factory);
    } else if (typeof exports === "object") {
        module.exports = factory();
    } else {
        root.pageUtils = factory();
    }
})(this, function () {
    var owner = {};

    function isRegExp(obj) {
        return Object.prototype.toString.call(obj) == "[object RegExp]";
    }
    
    function getCookieReg(_name) {
        return new RegExp(_name + "=([^;]*)(;|$)");
    }

    /**
   *        Cookie 
   * @param {Object} _name
   */
    owner.getCookie = function (_name) {
        var info = document.cookie;
        var cookieArr = info.split("; ");

        for (var i = 0, l = cookieArr.length; i < l; i++) {
            var valueArr = cookieArr[i].split("=");
            if (valueArr[0] && valueArr[0] == _name) {
                var cookieResults = document.cookie.match(getCookieReg(_name));
                if (cookieResults.length > 1) {
                    try {
                        return JSON.parse(decodeURIComponent(cookieResults[1])).value || JSON.parse(decodeURIComponent(cookieResults[1]));
                    } catch (err) {
                        return decodeURIComponent(cookieResults[1]);
                    }
                } else {
                    return '';
                }
            }
        }
    }

    /**
   *        Cookie 
   * @param {Object} _name
   */
    owner.getCookieObj = function () {
        var obj = {};
        var info = document.cookie;
        var cookieArr = info.split("; ");

        for (var i = 0, l = cookieArr.length; i < l; i++) {
            var valueArr = cookieArr[i].split("=");
            if (valueArr[0]) {
                var cookieResults = document.cookie.match(getCookieReg(valueArr[0]));
                if (cookieResults.length > 1) {
                    try {
                        obj[valueArr[0]] = JSON.parse(decodeURIComponent(cookieResults[1])).value || JSON.parse(decodeURIComponent(cookieResults[1]));
                    } catch (err) {
                        obj[valueArr[0]] = decodeURIComponent(cookieResults[1]);
                    }
                } else {
                    obj[valueArr[0]] = '';
                }
                
            }
        }

        return obj;

    }


    /**
   *   Cookie  
   * @param {String} _key
   * @param {String} _value
   * @param {Numer} _expires     
   * @param {String} _path
   * @param {Boolean} isJsonWarp    json  
   */
    owner.setCookie = function (_key, _value, _expires, _path, isJsonWarp) {
        _key = _key || "";
        _value = _value || "";
        isJsonWarp = isJsonWarp || false;
        var result = "";

        if (!_key) {
            return;
        }

        if (typeof _expires === 'boolean') {
            isJsonWarp = _expires;
        } else if (typeof _path === 'boolean') {
            isJsonWarp = _path;
        }

        if (isJsonWarp) {
            var jsonObj = {
                "value": _value
            };
            result = _key + "=" + encodeURIComponent(JSON.stringify(jsonObj)) + ";";
        } else {
            result = _key + "=" + encodeURIComponent(_value) + ";";
        }


        //       
        if (typeof (_expires) == "number") {
            //      expires  
            //       
            var d = new Date();
            d.setDate(d.getDate() + _expires);
            result += "expires=" + d + ";" + "path=" + _path;
        } else if (typeof (_expires) == "string") {
            result += "path=" + _expires;
        }
        document.cookie = result;
    }

    /**
   *     Cookie  
   * @param {Object} _name
   */
    owner.removeCookie = function (_name) {
        this.setCookie(_name, "", -1);
    }

    /**
   *           Cookie  
   * @param {Object} _name          RegExp
   * @param {Object} callback
   */
    owner.getCookies = function (_name, callback) {
        var info = document.cookie;
        var cookieArr = info.split("; ");
        var l = cookieArr.length;
        var getInfoArr = [];
        var regInfo = null;

        if (l > 0) {
            if (isRegExp(_name)) {
                regInfo = _name;
            } else {
                regInfo = eval("/" + _name + "/g");
            }

            for (var i = 0; i < l; i++) {
                var valueArr = cookieArr[i].split("=");
                var key = valueArr[0];
                if (regInfo.test(key)) {
                    regInfo.lastIndex = 0;
                    //          lastIndex  1,              ,  test    1 ,      ,     lastIndex   0,            ,    .....
                    //     /g,     reg.lastIndex=0
                    var value = null;
                    var cookieResults = document.cookie.match(getCookieReg(key));
                    if (cookieResults.length > 1) {
                        try {
                            value = JSON.parse(decodeURIComponent(cookieResults[1])).value || JSON.parse(decodeURIComponent(cookieResults[1]));
                        } catch (err) {
                            value = decodeURIComponent(cookieResults[1]);
                        }
                    } else {
                        value = '';
                    }
                    

                    getInfoArr.push([key, value]);

                    if (callback) {
                      callback(key, value);
                    }
                }
            }
        }
        return getInfoArr;
    }

    return owner;
});

좋은 웹페이지 즐겨찾기