技 巧 鍵 盤 ─ KeyNavi:キーボードを活用してホームページを快適に─    
キー割当表示[Shift-H]        
ホーム KeyNavi対応方法 [0] JavaScript@Keynavi.Netトップ [1] クッキー処理 ・サイトマップ [Shift-S]

■ クッキー処理:kl_cookie_set/del/get()

【クッキーの保存/削除/取得「kl_cookie_xxx()」<keynavi_ja.js】

//----------------------------
//クッキー保存:kl_cookie_set(key,val,path,exp)
//返り値:成功時は真
//key:クッキー名(文字列)
//val:値(文字列)
//path:保存先のパス(文字列)
//exp:保存期限 (日時を表す文字列か数値[-1/0/1])
//----------------------------
function kl_cookie_set_raw(key,val,path,exp){
        if(kl_eq(exp,-1)) exp="Mon, 31-Dec-1990 23:59:59 GMT";
        if(kl_eq(exp, 0)) exp="";
        if(kl_eq(exp, 1)) exp="Tue, 31-Dec-2030 23:00:00 GMT";
        var cs=key+"="+val+";";
        if(kl_isstr(path)) if(path.length>0) cs+=" path="+path+";";
        if(kl_isstr(exp)) if(exp.length >0) cs+=" expires="+exp+";";
        document.cookie=cs;
}
function kl_cookie_set(key,val,path,exp){
        kl_cookie_set_raw(key,val,path,exp);
        if(kl_eq(exp,1)){
                if(!kl_eq(kl_cookie_get(key),val)) kl_cookie_set_raw(key,val,path,0);
        }
        return kl_eq(kl_cookie_get(key),val);
}
//----------------------------
//クッキー削除:kl_cookie_del(key,path)
//返り値:成功時は真
//key:クッキー名(文字列)
//path:保存先のパス(文字列)
//----------------------------
function kl_cookie_del(key,path){
        kl_cookie_set(key,"",path,-1); return kl_eq(kl_cookie_get(key,-1),-1);
}
//----------------------------
//クッキー取得:kl_cookie_get(key,defval)
//返り値:成功時は文字列、失敗したら「defval(省略時はundefined)」
//key:クッキー名(文字列)
//----------------------------
function kl_cookie_get(key){
        if(!document.cookie) return defval;
        var v=document.cookie;
        var ns=v.indexOf(key+"="); if(ns<0) return defval; ns=ns+key.length+1;
        var ne=v.indexOf(";",ns); if(ne<0) ne=v.length;
        return v.substring(ns,ne);
}

Tips1:セッションCookie
ユーザがクッキーの機能を制限しセッションCookieのみを許可した場合、 上のコードで期限(exp)を指定すると 全く保存されません(WinIE5.0/IE5.5/IE6.0)。 少なくともブラウザ起動中はクッキーが有効になるよう、 一度保存して失敗したら期限指定無しで再度保存を実行します。
(exp=1時のみ。この動作が不要な場合は「raw」関数を直接呼んで下さい。)

Tips2:保存の可否判定とcookieEnabled
一般に navigator.cookieEnabled(真偽値)によりクッキーが有効かどうか 確かめられます。 しかしcookieEnabledは環境により期待通り動作しなかったり ブラウザのオプションで 「セッションCookieのみ有効」「ダイアログを表示する」 などとした場合はきちんと対応できません。 そのため保存の可否は実際に保存を実行してうまく行くかどうかで判断します。 kl_cookie_set()は実行の成否に合わせて真偽値を返します。

以下、引数の説明です。

val:保存する値(文字列)
日本語などエスケープが必要な文字列がある場合は 「escape(文字列)」を通した値を設定。 「unescape(文字列)」で元に戻ります。 暗号化が必要な場合は「kl_encrypt(s)」で暗号化、 「kl_decrypt(s)」で複合化できます。
path:保存先のパス
クッキーの「path」は通常サイトのルート「/」が使われることが多いですが プロバイダを利用していてサイトのサブディレクトリを使っている場合は 「/home/foo/」などと割当てられたディレクトリを指定します。
exp:クッキーの有効期限
「Mon, 31-Dec-1990 23:59:59 GMT」といった形式の日時を表す文字列を指定します。 過去の日時を指定するとクッキーを削除できます。 実際の利用では「永遠」「ブラウザ起動中」「過去=削除」の 何れかの場合が多いです。 そこで便宜的に数値の「1/0/-1」で各場合に相当させています。

【kl_cookie_xxx()を使ったサンプル】

<script language="javascript" src="http://www.keynavi.net/files/keynavi_ja.js"></script>
<script language="javascript" src="http://www.keynavi.net/files/keynavi_tools.js"></script>
.....
<a href="javascript:void(0)" onclick="kl_cookie_set('session_id','foo','/',0); return false;">設定</a>
<a href="javascript:void(0)" onclick="kl_cookie_del('session_id','/'); return false;">削除</a>
<a href="javascript:void(0)" onclick="alert(kl_cookie_get('session_id'));">参照</a>
.....




【JavaScript@Keynavi.Net : その他編 】
「Ctrl-矢印」でフォーカスを上下左右に移動できます。

  - status出力をリダイレクト:kl_status(s,opt)
  - 外部スクリプトを動的に読み込む
  - フレームページでも個別URL指定を可能に
  - 文字列の暗号化:kl_encrypt/decrypt()
  - Try,Catch文の互換性対策
  - クッキー処理:kl_cookie_set/del/get()

トップへ戻る [1]
ホーム KeyNavi対応方法 [0] JavaScript@Keynavi.Netトップ [1] クッキー処理 ・サイトマップ [Shift-S]
キー割当表示[Shift-H] ─ KeyNavi Project 2003 ─