目次
サンプル・プログラム
cookie.html | クッキーを使う |
localStorage.html | ローカルストレージを使う |
バージョン | 更新日 | 内容 |
---|---|---|
1.1.0 | 2023/08/16 | コメント追加 |
1.0 | 2021/09/18 |
バージョン | 更新日 | 内容 |
---|---|---|
1.1.0 | 2023/08/16 | ファイル名変更,コメント追加 |
1.0 | 2021/09/18 | 初版 |
クッキーとは
たとえば、次のような使い方が考えられる。
- クライアントAがサーバαにアクセスする。このときクッキーは空。
- サーバαはアクセス日時をクッキーのキーlastaccessに代入してクライアントAに返す。
- クライアントAはlastaccessを受け取り保管する。サーバ側で保管期日を設定したり、ブラウザ終了後に廃棄するという設定もできる。
ただし、セキュリティ保持の観点から、サーバαとやり取りしているクッキーの内容と、別のサーバβとのやり取りで参照したり保管することはできない。サーバαとサーバβの識別はドメイン名で行っている。
また、サーバ通信(HTTP通信)ではクッキーの内容が平文でやり取りされる。データを秘匿したいのであれば、暗号化通信(HTTPS通信)を利用しなければならない。
クッキーの値を取得する
38: /**
39: * クッキーの値を取得する
40: * @param String key クッキー名
41: * @return String 値/null:値がない
42: */
43: function getCookie(key) {
44: let val = null;
45: let cookies = document.cookie.split(';'); //全てのクッキー
46: console.log(cookies);
47:
48: //keyに合致する値を取り出す
49: for (let i = 0; i < cookies.length; i++) {
50: let arr = cookies[i].split('=');
51: if (arr[0].trim() === key) {
52: val = arr[1];
53: break;
54: }
55: }
56:
57: return val;
58: }
クッキーに値を設定する
与えられた日時と現在日時の差を求める
70: /**
71: * 与えられた日時と現在日時の差を求める
72: * @param String dt 日時(文字列)
73: * @param Number 差(秒)/NaN:dtが不正
74: * @return なし
75: */
76: function diffDateTime(dt) {
77: let dt0 = new Date();
78: let dt1 = new Date(dt);
79: if (isNaN(dt1)) return NaN;
80: let diff = Math.round((dt0.getTime() - dt1.getTime()) / 1000);
81:
82: return diff;
83: }
クッキーを使う
95: //クッキー対応可否チェック
96: if (typeof document.cookie === 'undefined') {
97: document.getElementById('error').innerHTML = 'エラー:クッキーが利用できません.';
98: return;
99: }
100: //クッキーから値を取得
101: let val = getCookie(COOKIE_KEY);
102: //値がない
103: if (val == null) {
104: document.getElementById('val').innerHTML = '未登録';
105: //値がある
106: } else {
107: document.getElementById('val').innerHTML = COOKIE_KEY + '=' + val;
108: let diff = diffDateTime(val);
109: if (! isNaN(diff)) {
110: document.getElementById('diff').innerHTML = diff;
111: }
112: }
113:
114: //現在日時をクッキーに保存
115: let dt = new Date();
116: setCookie(COOKIE_KEY, dt.toISOString());
117: }
対応していれば、クッキーから値を取得し、それを表示する。
最後に、現在日時をクッキーに保存する。
ローカルストレージとは
Web Storage には、localStorage と sessionStorage の2種類があり、それぞれの特徴を下表に示す。
名称 | 特 徴 |
---|---|
sessionStorage | 一時的にデータを保存する。 ウィンドウを閉じるタイミングで消える。 同じページを複数のウィンドウで開いた場合、別々に保存される。 |
localStorage | 明示的に消去しない限り、データをローカル環境に保持し続ける。 |
つまり、プロトコル、ドメイン、ポート番号のいずれかが異なれば、キー情報が同じでも異なるデータ格納領域となる。"https://www.pahoo.org/e-soul/webtech/js01/program/birthgame.html" と "https://www.pahoo.org/index.html" は同じオリジンである。
また、オリジンが異なるデータ領域へのアクセスをさせないことで、セキュリティを保っている。
クッキー はHTTP通信の時に必ずやり取りされるデータであったのに対し、Web Storage は通信しない、つまり、純粋にクライアントPCに保存するための仕組みである。
なお、キャッシュ は余計な通信を減らすための手段で、データを保存を目的とするものではない。明示的にキャッシュにアクセスするための手段も用意されていない。
ローカルストレージを使う
63: //ローカルストレージ対応可否チェック
64: if (typeof localStorage === 'undefined') {
65: document.getElementById('error').innerHTML = 'エラー:ローカルストレージが利用できません.';
66: return;
67: }
68:
69: //ローカルストレージから値を取得
70: let val = localStorage.getItem(LOCALSTRAGE_KEY);
71: //値がない
72: if (val == null) {
73: document.getElementById('val').innerHTML = '未登録';
74: //値がある
75: } else {
76: document.getElementById('val').innerHTML = LOCALSTRAGE_KEY + '=' + val;
77: let diff = diffDateTime(val);
78: if (! isNaN(diff)) {
79: document.getElementById('diff').innerHTML = diff;
80: }
81: }
82:
83: //現在日時をローカルストレージに保存
84: let dt = new Date();
85: localStorage.setItem(LOCALSTRAGE_KEY, dt.toISOString());
86: }
対応していれば、ローカルストレージから値を取得し、それを表示する。
最後に、現在日時をローカルストレージに保存する。
コラム:ブラウザによる挙動の違い
クッキー | ローカルストレージ | |||
---|---|---|---|---|
http(s):// | file:// | http(s):// | file:// | |
IE | ○ | ○ | ○ | × |
Edge | ○ | × | ○ | ○ |
Chrome | ○ | × | ○ | ○ |
Firefox | ○ | ○ | ○ | ○ |
Safari | ○ | × | ○ | × |
今回は、クッキーとローカルストレージの利用方法を説明する。