jquery.cookie是一个轻量级的读、写、清除浏览器cookies的jQuery插件。

整个插件也就几十行,无非是对document.cookie字符串的拼接组装与解析返回,很奇怪为啥jQuery不把cookie的操作给内置了。以下是插件源码:

/*jshint eqnull:true */
/*!
 * jQuery Cookie Plugin v1.1
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2011, Klaus Hartl
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.opensource.org/licenses/GPL-2.0
 */
(function($, document) {

	var pluses = /\+/g;
	function raw(s) {
		return s;
	}
	function decoded(s) {
		return decodeURIComponent(s.replace(pluses, ' '));
	}

	$.cookie = function(key, value, options) {

		// key and at least value given, set cookie...
		if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value == null)) {
			options = $.extend({}, $.cookie.defaults, options);

			if (value == null) {
				options.expires = -1;
			}

			if (typeof options.expires === 'number') {
				var days = options.expires, t = options.expires = new Date();
				t.setDate(t.getDate() + days);
			}

			value = String(value);

			return (document.cookie = [
				encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
				options.path    ? '; path=' + options.path : '',
				options.domain  ? '; domain=' + options.domain : '',
				options.secure  ? '; secure' : ''
			].join(''));
		}

		// key and possibly options given, get cookie...
		options = value || $.cookie.defaults || {};
		var decode = options.raw ? raw : decoded;
		var cookies = document.cookie.split('; ');
		for (var i = 0, parts; (parts = cookies[i] && cookies[i].split('=')); i++) {
			if (decode(parts.shift()) === key) {
				return decode(parts.join('='));
			}
		}
		return null;
	};

	$.cookie.defaults = {};

})(jQuery, document);

版本1.1,应该不会有更新了,给个下载:jquery.cookie.js

Git主页:https://github.com/carhartl/jquery-cookie/

 

中文文档:

1.安装

在网页加载jQuery库的后面包含jquery.cookie插件(如果你没有将这些代码打包在别的文件里)。

<script src="/path/to/jquery.cookie.js"></script>

2.使用

设置一个session cookie:

$.cookie('the_cookie', 'the_value');

设置一个7天后过期的cookie:

$.cookie('the_cookie', 'the_value', { expires: 7 });

设置一个含有过期时间声明,并且整个站点有效的cookie:

$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });

读取:

$.cookie('the_cookie'); // => 返回"the_value"
$.cookie('the_cookie', { raw: true }); // => "the_value" 读取时不使用url decode解码
$.cookie('not_existing'); // => 不存在的则返回null

通过将cookie的值设为null来删除cookie:

$.cookie('the_cookie', null);

注意:当删除cookie时,如果之前设置cookie的时候指定了path, domain和secure参数,那么删除时必须指定完全一样的上述参数。

3.参数Options的项

Options可以通过设置 $.cookie.defaults 对象的属性来设置为全局的,也可以通过调用 $.cookie() 时为参数options传入一个对象来分别独立设置。每个独立设置的options都会覆盖 $.cookie.defaults 设置的值。

expires: 365

expires定义了cookie的生命周期。它的值可以是一个数字,表示从创建cookie开始多少天以后过期。也可以是一个Date对象。如果不传此参数,这个cookie会被作为session cookie设置。

这里解释一下,cookies有两种类型:

(1) session cookies,这些是临时的cookie,他们保存在浏览器的内存里,关闭浏览器就会被清除。当你重启浏览器回到之前创建了cookie的页面,网站并不能认出你。
(2) persistent cookies,这些cookie文件会一直保存在你的硬盘上,直到你手动删除他们或者浏览器根据他们的过期时间自动删除他们。

path: '/'

path定义cookie有效的范围。默认cookie只在其创建的页面有效(浏览器标准行为),如果你想让域名下的所有页面都有效,设置 path: ‘/’ 。其默认值为创建cookie的页面。

domain: 'example.com'

domain定义cookie有效的域名。其默认值为创建cookie的页面所属的域名。

secure: true

secure如果为true,cookie的传输会需要安全协议(https)。默认为false。

raw: true

默认情况下,cookie的值在设置和读取的时候,会使用encodeURIComponent / decodeURIComponent 来编码和解码。如果要关闭这一行为,可将raw设置为true。默认值是false。