読者です 読者をやめる 読者になる 読者になる

ゴミ溜め@技術系日常系雑文

主にWeb技術やそのほかつまづいたこととか引っかかって調べたこととかをまとめてます。

はてなダイアリーから引っ越しました。)

JavascriptでCookieを2

javascript ウェブサイト制作

前回に続いて、Cookieを簡単に扱えるようにしてみる。

/**
 * Cookieの情報を読み書きする。
 */
var Cookie = {
  
    /**
     * Cookieの値を参照する。
     * @param name string 参照したい情報のNAME。
     * @return 当該の値。
     */
    get: function( name ) {
      
        var match = ('; ' + document.cookie + ';').match('; ' + name + '=(.*?);');
        var value = match ? decodeURIComponent(match[1]) : null;
        
        return value;
    },
    
    /**
     * Cookieに値を記録する。
     * @param name   string 参照名。
     * @param value  string 値。
     * @param option hash   expires(賞味期限:datetime), domain(有効ドメイン:string), path(有効パス:string), secure(セキュア状態でないと参照できないか否か:bool) の各情報。
     * @return 成功時: 記録したクッキー文字列。 失敗時: false。
     */
    set: function(name, value, option) {

        if( typeof name != 'undefined' && name != '' && typeof value != 'undefined' && value != '' ) {
          var buffer = name + '=' + encodeURIComponent(value);
          if ( typeof(option) !== 'undefined' ) {
            if (typeof option.expires != 'undefined' && option.expires != '' ) buffer += '; expires=' + new Date(option.expires).toUTCString();
            if (typeof option.domain  != 'undefined' && option.domain  != '' ) buffer += '; domain='  + option.domain;
            if (typeof option.path    != 'undefined' && option.path    != '' ) buffer += '; path='    + option.path;
            if (typeof option.secure  == 'boolean'   && option.secure        ) buffer += '; secure';
          }
          buffer += ";";
          
          document.cookie = buffer;
          
          return buffer;
        }
        else { return false; }
    },
    
    /**
     * Cookieの値を削除する。
     * @param name string 削除する値の参照名。
     * @return nullだったら無事削除できてる。
     */
    remove: function(name) {
      
      //1970年1月1日00:00:00の日付データをセットする
      var expires = new Date();
      expires.setTime(0);
      
      //有効期限を過去にして書き込む
      document.cookie = name +"=;expires="+ expires.toGMTString();
    }
};

このあたり

//1970年1月1日00:00:00の日付データをセットする
var expires = new Date();
expires.setTime(0);

がちょっとどうなのってかんじだけど、わざわざ内部時計を1970年より前にしてるような巧妙な人はいないだろうからまあいいか。

必要にかられたら

var foo = Cookie.get("name");
console.log( foo );         // -> "hoge"

var options = ["expires","secure"];
var bar = Cookie.get("name", options );
console.log( bar.value );   // -> "hoge"
console.log( bar.expires ); // -> Date {Fri Jul 13 2012 11:40:07 GMT+0900}
console.log( bar.secure );  // -> true

みたいな使い方ができるように・・・・しないなあ、もっとちゃんとしたコード公開されてるから、それに乗り換えよう。