zoukankan      html  css  js  c++  java
  • cookie 封装

    1.代码

    ;(function (factory) {
    	var registeredInModuleLoader;
    	if (typeof define === 'function' && define.amd) {
    		define(factory);
    		registeredInModuleLoader = true;
    	}
    	if (typeof exports === 'object') {
    		module.exports = factory();
    		registeredInModuleLoader = true;
    	}
    	if (!registeredInModuleLoader) {
    		var OldCookies = window.Cookies;
    		var api = window.Cookies = factory();
    		api.noConflict = function () {
    			window.Cookies = OldCookies;
    			return api;
    		};
    	}
    }(function () {
    	function extend () {
    		var i = 0;
    		var result = {};
    		for (; i < arguments.length; i++) {
    			var attributes = arguments[ i ];
    			for (var key in attributes) {
    				result[key] = attributes[key];
    			}
    		}
    		return result;
    	}
    
    	function decode (s) {
    		return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
    	}
    
    	function init (converter) {
    		function api() {}
    
    		function set (key, value, attributes) {
    			if (typeof document === 'undefined') {
    				return;
    			}
    
    			attributes = extend({
    				path: '/'
    			}, api.defaults, attributes);
    
    			if (typeof attributes.expires === 'number') {
    				attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
    			}
    
    			// We're using "expires" because "max-age" is not supported by IE
    			attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
    
    			try {
    				var result = JSON.stringify(value);
    				if (/^[{[]/.test(result)) {
    					value = result;
    				}
    			} catch (e) {}
    
    			value = converter.write ?
    				converter.write(value, key) :
    				encodeURIComponent(String(value))
    					.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
    
    			key = encodeURIComponent(String(key))
    				.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
    				.replace(/[()]/g, escape);
    
    			var stringifiedAttributes = '';
    			for (var attributeName in attributes) {
    				if (!attributes[attributeName]) {
    					continue;
    				}
    				stringifiedAttributes += '; ' + attributeName;
    				if (attributes[attributeName] === true) {
    					continue;
    				}
    
    				// Considers RFC 6265 section 5.2:
    				// ...
    				// 3.  If the remaining unparsed-attributes contains a %x3B (";")
    				//     character:
    				// Consume the characters of the unparsed-attributes up to,
    				// not including, the first %x3B (";") character.
    				// ...
    				stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
    			}
    
    			return (document.cookie = key + '=' + value + stringifiedAttributes);
    		}
    
    		function get (key, json) {
    			if (typeof document === 'undefined') {
    				return;
    			}
    
    			var jar = {};
    			// To prevent the for loop in the first place assign an empty array
    			// in case there are no cookies at all.
    			var cookies = document.cookie ? document.cookie.split('; ') : [];
    			var i = 0;
    
    			for (; i < cookies.length; i++) {
    				var parts = cookies[i].split('=');
    				var cookie = parts.slice(1).join('=');
    
    				if (!json && cookie.charAt(0) === '"') {
    					cookie = cookie.slice(1, -1);
    				}
    
    				try {
    					var name = decode(parts[0]);
    					cookie = (converter.read || converter)(cookie, name) ||
    						decode(cookie);
    
    					if (json) {
    						try {
    							cookie = JSON.parse(cookie);
    						} catch (e) {}
    					}
    
    					jar[name] = cookie;
    
    					if (key === name) {
    						break;
    					}
    				} catch (e) {}
    			}
    
    			return key ? jar[key] : jar;
    		}
    
    		api.set = set;
    		api.get = function (key) {
    			return get(key, false /* read as raw */);
    		};
    		api.getJSON = function (key) {
    			return get(key, true /* read as json */);
    		};
    		api.remove = function (key, attributes) {
    			set(key, '', extend(attributes, {
    				expires: -1
    			}));
    		};
    
    		api.defaults = {};
    
    		api.withConverter = init;
    
    		return api;
    	}
    
    	return init(function () {});
    }));

    2.使用

    1.存到Cookie去

    // Create a cookie, valid across the entire site:
    Cookies.set('name', 'value');
    
    // Create a cookie that expires 7 days from now, valid across the entire site:
    Cookies.set('name', 'value', { expires: 7 });
    
    // Create an expiring cookie, valid to the path of the current page:
    Cookies.set('name', 'value', { expires: 7, path: '' });

    2.在Cookie中取出

    // Read cookie:
    Cookies.get('name'); // => 'value'
    Cookies.get('nothing'); // => undefined
    
    // Read all visible cookies:
    Cookies.get(); // => { name: 'value' }

    3.删除

    // Delete cookie:
    Cookies.remove('name');
    
    // Delete a cookie valid to the path of the current page:
    Cookies.set('name', 'value', { path: '' });
    Cookies.remove('name'); // fail!
    Cookies.remove('name', { path: '' }); // removed!

    .

  • 相关阅读:
    XVIII Open Cup named after E.V. Pankratiev Stage 5: Eastern Grand Prix
    XX Russia Team Open, High School Programming Contest St Petersburg, Barnaul, Tbilisi, Almaty, Kremenchug, November 30, 2019
    2019-2020 ICPC, NERC, Northern Eurasia Finals
    The 2019 China Collegiate Programming Contest Harbin Site
    Southeastern European Regional Programming Contest 2019
    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)
    2019-2020 Saint-Petersburg Open High School Programming Contest (SpbKOSHP 19)
    hdu6354 Everything Has Changed (圆的相交弧长)
    hdu6341 Problem J. Let Sudoku Rotate (dfs)
    hdu6333 Problem B. Harvest of Apples(组合数+莫队)
  • 原文地址:https://www.cnblogs.com/crazycode2/p/9991884.html
Copyright © 2011-2022 走看看