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のみにしておきます。
0 件のコメント:
コメントを投稿