/** * 封装操作cookie的方法 */ var ucb = ucb || {}; ucb.Supports = { /** * @property 是否支持触控 * @type {Boolean} */ Touch: ('ontouchstart' in window) }; ucb.Cookie = ucb.Cookie || {}; (function(cookie) { /** * 验证字符串是否合法的cookie键名 * * @param {string} source 需要验证的key * @return {bool} 是否合法的cookie键名 */ cookie._isValidKey = function(key) { return (new RegExp("^[^\\x00-\\x20\\x7f\\(\\)<>@,;:\\\\\\\"\\[\\]\\?=\\{\\}\\/\\u0080-\\uffff]+\x24")) .test(key); }; /** * 获取cookie的值,不对值进行解码 * * @function * @param {string} key 需要获取Cookie的键名 * * @returns {string|null} 获取的Cookie值,获取不到时返回null */ cookie.getRaw = function(key) { if (cookie._isValidKey(key)) { var reg = new RegExp("(^| )" + key + "=([^;]*)(;|\x24)"), result = reg.exec(document.cookie); if (result) { return result[2] || null; } } return null; }; /** * 获取cookie的值,用decodeURIComponent进行解码 * * @function * @param {string} key 需要获取Cookie的键名 * @description 注意:该方法会对cookie值进行decodeURIComponent解码。如果想获得cookie源字符串,请使用getRaw方法。 * * @returns {string|null} cookie的值,获取不到时返回null */ cookie.get = function(key) { var value = cookie.getRaw(key); if ('string' == typeof value) { value = decodeURIComponent(value); return value; } return null; }; /** * 设置cookie的值,不对值进行编码 * * @function * @param {string} key 需要设置Cookie的键名 * @param {string} value 需要设置Cookie的值 * @param {Object} [options] 设置Cookie的其他可选参数 * @config {string} [path] cookie路径 * @config {Date|number} [expires] cookie过期时间,如果类型是数字的话, 单位是毫秒 * @config {string} [domain] cookie域名 * @config {string} [secure] cookie是否安全传输 */ cookie.setRaw = function(key, value, options) { if (!cookie._isValidKey(key)) { return; } options = options || {}; // 计算cookie过期时间 var expires = options.expires; if ('number' == typeof options.expires) { expires = new Date(); expires.setTime(expires.getTime() + options.expires); } document.cookie = key + "=" + value + (options.path ? "; path=" + options.path : "") + (expires ? "; expires=" + expires.toGMTString() : "") + (options.domain ? "; domain=" + options.domain : "") + (options.secure ? "; secure" : ''); }; /** * 设置cookie的值,用encodeURIComponent进行编码 * * @function * @param {string} key 需要设置Cookie的键名 * @param {string} value 需要设置Cookie的值 * @param {Object} [options] 设置Cookie的其他可选参数 * @config {string} [path] cookie路径 * @config {Date|number} [expires] cookie过期时间,如果类型是数字的话, 单位是毫秒 * @config {string} [domain] cookie域名 * @config {string} [secure] cookie是否安全传输 */ cookie.set = function(key, value, options) { cookie.setRaw(key, encodeURIComponent(value), options); }; /** * 删除cookie的值 * * @function * @param {string} key 需要删除Cookie的键名 * @param {Object} options 需要删除的cookie对应的 path domain 等值 */ cookie.remove = function(key, options) { options = options || {}; options.expires = new Date(0); cookie.setRaw(key, '', options); }; })(ucb.Cookie);