[Javascript] クッキー処理のスニペット

2016/08/06

Javascript Tips テクノロジー プログラミング

t f B! P L
Javascriptでcookie操作をするのは比較的簡単ですが、secure処理や、有効期限処理などは、少し面倒くさい手順があるので、スニペットにしておきました。 コピペしてお使いください。

ソースコード

(function(){ var $$={} //cookie $$.cookie = { //init-data options:{ name : 'temporary_cookie', day : 0, hour : 0, min : 1, sec : 0 }, //expires date : function() { var exp = new Date(); exp.setTime(exp.getTime() + (this.options.day * 1000 * 60 * 60 * 24) + (this.options.hour * 1000 * 60 * 60) + (this.options.min * 1000 * 60) + (this.options.sec * 1000)); return exp.toGMTString(); }, //secure-check checkSecure : function() { if (location.href.match(/^https/)) {return true} else {return false} }, set : function(name, val) { if(!name){name = this.options.name} val = this.encode(val); if (this.checkSecure()) { document.cookie = name + "=" + val + ";expires=" + this.date() + ";secure"; } else { document.cookie = name + "=" + val + ";expires=" + this.date(); } }, get : function(name){ return this.val(name); }, val : function(name) { var ck0 = document.cookie.split(" ").join(""); var ck1 = ck0.split(";"); for ( var i = 0; i < ck1.length; i++) { var ck2 = ck1[i].split("="); if (ck2[0] == name) { ck2[1] = this.encode(ck2[1]); return ck2[1]; } } return ''; }, encode:function(val){ if (!val) {return ""} val = val.split("¥r") .join(""); val = val.split("¥n") .join(""); val = val.split("<") .join("-"); val = val.split("%3c").join("-"); val = val.split("%3C").join("-"); val = val.split(">") .join("-"); val = val.split("%3e").join("-"); val = val.split("%3E").join("-"); return val; } }; window.$$LIB = $$; })();

解説

「options」のデータ構造
name : bcookieのkeyになるname値 day : 有効期限◯日 hour : 有効期限◯時間 min : 有効期限◯分 sec : 有効期限◯秒
基本設定は上記の5つですが、今回は固定値で行うようにしています。 ちなみに、デフォルトは1分になっているんですが、好きに変更してください。

expires

上記のoptionsの有効期限を元にcookieに書き込む際に登録する形のデータを取得します。

checkSecure

httpsページの場合にtrueを返します。 cookieの書き込みをセキュアモードで行うための判定

set

cookieデータの書き込み処理 key値の指定(blankにした場合はoptionsのデフォルト値になる}

get

cookieデータの読み込み処理 key値の指定に該当するcookieの値を取得します。

val

getで取得する際のドメインのcookie値の中からkey値に該当するデータを取得する関数

encode

JSの脆弱性が発動しないように、タグに関連する文字列をエンコードする処理

グローバル値

「window.$$LIB」に格納してあるので、このスニペット以外でも、このグローバル関数を経由してアクセスすることができる。

使い方

外部環境から実行するプログラムとしてサンプルが書かれています。

cookieの書き込み

$$LIB.cookie.set("hoge" , "This is a pen.");

cookieの読み込み

$$LIB.cookie.get("hoge"); 結果:This is a pen.

注意点

cookieの仕様として、first-party-cookieのみを対象にしてます。 サーバーサイドプログラムと組み合わせるとthird-party-cookieも可能になりますが、safariでは使えないので、今のところ1stのみにしておきます。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ