home wiki.fukuchiharuki.me
Menu

関連

  • JavaScript/Cookie
  • jQuery

概要

JavaScriptでクッキーを扱うための簡単なツールです。 Javaライクなインタフェースにしてみました。

こんなものは探せばもっといいものがありそうだけど、せっかく作ってみたので公開します。

JavaScriptコード

var myUtil = {};

// ------------------------------ [ Utility: 空判定 ] ------------------------------
myUtil.empty = function(o) {
	 return (! o || o.length == 0);
};

// ------------------------------ [ Utility: トリム ] ------------------------------
myUtil.trim = function(o) {
	 return o.replace(/(^\s+)|(\s+$)/g, '');
};
var myTool = {};

// ------------------------------ [ Tool: クッキー ] ------------------------------
myTool.cookie = {};

/**
 * クッキーのエンティティ.
 */
myTool.cookie.Cookie = function(name, value) {
	 if (! name) {
		 name = null;
	 }
	 if (! value) {
		 value = null;
	 }

	 var self = this;
	 self.name = name;
	 self.value = value;
	 self.expires = null;
	 self.domain = null;
	 self.path = null;
	 self.secure = true;

	 self.generateRawFormatString = function() {
		 var raw =
			 encodeURI(self.name) + "=" + encodeURI(self.value) + ";" +
			 ((self.expires)? " expires=" + self.expires + ";": "") +
			 ((self.domain)?  " domain="  + self.domain  + ";": "") +
			 ((self.path)?    " path="    + self.path    + ";": "") +
			 ((self.secure)?  " secure": "");
		 return raw;
	 };
};

/**
 * クッキーを取得します.
 * <p>取得できるクッキーが存在しない場合nullを返却します。</p>
 * @return クッキーのエンティティ配列
 */
myTool.cookie.getCookies = function() {
	 var cookie = document.cookie;
	 if (myUtil.empty(cookie)) {
		 return null;
	 }
	 var cookies = [];
	 jQuery.each(cookie.split(';'), function() {
		 var keyValue = myUtil.trim(this).split('=');
		 var key = decodeURI(keyValue[0]);
		 var value = decodeURI(keyValue[1]);
		 if (! myUtil.empty(key)) {
			 cookies.push(new myTool.cookie.Cookie(key, value));
		 }
	 });
	 return (cookies.length > 0)? cookies: null;
};

/**
 * 名前を指定してクッキーを取得します.
 * @param name クッキーの名前
 * @return 指定の名前に該当するクッキーのエンティティ
 */
myTool.cookie.getCookie = function(name) {
	 if (! name) {
		 return null;
	 }
	 var ret = null;
	 var cookies = myTool.cookie.getCookies();
	 if (cookies) {
		 jQuery.each(cookies, function() {
			 if (name == this.name) {
				 ret = this;
			 }
		 });
	 }
	 return ret;
};

/**
 * クッキーを保存します.
 * @param cookie 保存するクッキーのエンティティ
 */
myTool.cookie.addCookie = function(cookie) {
	 document.cookie = cookie.generateRawFormatString();
};

使い方

// ログインIDをクッキーから復元する
jQuery('#login-id').val(function() {
	var cookie = myTool.cookie.getCookie('login-id');
	return (cookie)? cookie.value: '';
});
// submit前にログインIDをクッキーに保存する
jQuery('#login-form-button').click(function() {
	var cookie = new myTool.cookie.Cookie('login-id', jQuery('#login-id').val());
	myTool.cookie.addCookie(cookie);
	jQuery('#login-form').submit();
});

参考