【おやじのweb技】 html/javascript/css等の基本技
winXP+IE6

TopPage表示 /  保 存 /  印 刷 /  Window Resize /  Window Close

b007

クッキー(cookie)を用いる

【目 次】
【技b007-1】クッキーを発行する
   クッキーを発行する
   同一ページで複数のデータを発行する
【技b007-2】クッキーを読み込む
   保存されたデータをすべて読み込む
   指定したデータのみ読み込む
【技b007-3】クッキーに書き込まれたデータを消去する 】
【技b007-4】その他のクッキー技
   クッキーの書き込みができない場合は警告する
   パスを設定する(クッキーを発行するhtmlファイルのパス以外)
   保存期限を年月日でなくて○日後に設定する
【技b007-5】フォームへの入力データをクッキーに書き込む/読み込む/消去する(応用技)
【解説等】

web工房  Copyright(C) 2005 web工房 All Rights Reserved 
このページのトップに戻る /  Window Resize /  Window Close /  最終更新日表示

action
&
web技

topへ目次へ前へ次へ
【技b007-1】クッキーを発行する
  cookie名:webStudio_cookie_00
  データの値:これはweb工房です/abcdefghijk
  保存する期限:2099年2月28日
■クッキーを発行する(リンク文字をクリックして下さい)
  クッキーを発行する
    (左の条件でクッキーを発行します)

■クッキーの発行

◆手順1【スクリプトの実行】
-----次の行から(copy)-----
<a href="javascript://" onclick="write_theCookie_Exs()">クッキーを発行する</a>
-----上の行まで(copy)-----

◆手順2【javascript】
-----次の行から(copy)-----
function write_theCookie_Exs() {
 theName="webStudio_cookie_00"; //cookie名
 theCookie_Value="これはweb工房です/abcdefghijk"; //データの値
 theCookie_Day="28,Feb 2099"; //保存期限(日)

 setDay=new Date(theCookie_Day); //新規オブジェクトの宣言
 theCookie_expDay=setDay.toGMTString(); //世界標準時(GMT)に変換
 document.cookie=theName + "=" + escape(theCookie_Value) + ";expires=" + theCookie_expDay;

 alert("指定のデータ名[" + theName + "]の値[" + theCookie_Value + "]をcookieに保存しました。");
}
-----上の行まで(copy)-----

■スクリプトの解説

◆クッキーの書き込み
※document.cookie=
  theName(クッキー名) + "=" +  //クッキー名
  escape(theCookie_Value) + ";" +  //データ内容
  "expires=" + theCookie_expDay;  //有効期限
◆データの文字コード化
※escape()  escape関数/全角文字等をHTMLエンコードします。半角英文字はそのまま表示されます。
◆有効期限を世界標準時(GMT)に変換
※theCookie_expDay=setDay.toGMTString();
※日本時間で2月28日23時59分59秒を有効期限としたい場合は、世界標準時に対して日本時間が9時間の時差があるので
  theCookie_Day="28,Feb 2099 15:00:00";  のように指定します。

■保存されたクッキー

◆保存場所
※windowsXPの場合、クッキーは[C:\Documents and Settings\(コンピュータ名)\Cookies]に保存されます。
※クッキーを発行したら、すぐに上記フォルダを開き、フォルダを「詳細表示」に設定し更新日時の最も新しいファイルを開いてみて下さい。
◆クッキーのファイル名
※ファイル名は (コンピュータ名)@(パス名の一番最後のフォルダ名)[1].txt です。
※[]内は、同一フォルダで異なるクッキーを作ったときに[2][3]...と自動付番されるようですが、詳細はもう少し使い込んでみないとよく判りません(^^;;)。
◆保存内容
-----次の行から(copy)-----
webStudio_cookie_00  //cookie名
%u3053%u308C%u306Fweb%u5DE5%u623F%u3067%u3059/abcdefghijk  //データ内容
ドメイン名/web_studio/tech_b/  //ドメイン名・パス名
1088  //保存期限
2063013888
29768622
967278192
29683398
*
-----上の行まで(copy)-----
◆ドメイン名・パス名
※ドメイン名・パス名とも自動取得
※パス名はクッキーを発行したHTML文書のパス名となります。

  cookie名:webStudio_cookie_99
  データの値:2つ目のデータです/lmnopqr
  保存する期限:2099年2月28日
■同一ページで複数のデータを発行する
 2つ目クッキーを発行します。リンク文字をクリックして下さい)
  クッキーを発行する
    (左の条件でクッキーを発行します)

◆手順1【スクリプトの実行】/手順2【スクリプト】は省略

■保存されたクッキー

◆保存場所及びクッキーのファイル名
※windowsXPの場合、クッキーは[C:\Documents and Settings\(コンピュータ名)\Cookies]に保存されます。
※【b007-1】で作成されたファイルに書き込まれています。
◆保存内容
-----次の行から(copy)-----
webStudio_cookie_00  //cookie名
%u3053%u308C%u306Fweb%u5DE5%u623F%u3067%u3059/abcdefghijk  //データ内容
ドメイン名/web_studio/tech_b/  //ドメイン名・パス名
1088  //保存期限
2063013888
29768622
3003151712
29683403
*
webStudio_cookie_99
2%u3064%u76EE%u306E%u30C7%u30FC%u30BF%u3067%u3059/lmnopqr
ドメイン名/D:\www\WEB工房\web_studio\tech_b\
1088
2063013888
29768622
628562528
29683407
*
-----上の行まで(copy)-----

topへ目次へ前へ次へ
【技b007-2】クッキーを読み込む
  cookie名:
webStudio_cookie_00
webStudio_cookie_99

■保存されたデータをすべて読み込む
 クッキーを読み込みます。リンク文字をクリックして下さい。
  クッキーを読み込む
    ※【技b007-1】で発行したクッキーです
    ※クッキーが発行されていない場合は何も生じません。
    ※異なるcookie名で複数のデータが保存されている場合はすべて表示します。

■指定したデータのみ読み込む
 データ毎にクッキーを読み込みます。リンク文字をクリックして下さい。
  webStudio_cookie_00を読み込む
  webStudio_cookie_99を読み込む
    ※【技b007-1】で発行したクッキーです
    ※クッキーが発行されていない場合は何も生じません。

■クッキーに保存されたデータをすべて読み込む

◆手順1【スクリプトの実行】
-----次の行から(copy)-----
<a href="javascript://" onclick="read_theCookie_Exs()">クッキーを読み込む</a>
-----上の行まで(copy)-----

◆手順2【javascript】
-----次の行から(copy)-----
function read_theCookie_Exs() {
theCookie_Value=unescape(document.cookie);
alert("cookieに保存されているクッキーは["+ theCookie_Value + "]です。");
}
-----上の行まで(copy)-----

◆クッキーの読み込み形式
※ここでクッキーをすべて読み込んだときダイアログに表示される形式は
  cookie名=データ内容;cookie名=データ内容
となっており、「cookie名=データ内容」が「;」記号で連結されています。   webStudio_cookie_00=これはweb工房です/abcdefghijk; webStudio_cookie_99=2つ目のデータです/lmnopqr ※最後に「;」はついていないことに注意して下さい。cookie名毎に読み出す場合はクッキーの最後尾に「;」を付加して処理を行います。

■指定したデータのみ読み込む

◆手順1【スクリプトの実行】
※引数として「読み込むcookie名」を渡します

-----次の行から(copy)-----
<a href="javascript://" onclick="read_theCookie_Exs2('webStudio_cookie_00')">webStudio_cookie_00を読み込む</a>
-----上の行まで(copy)-----

◆手順2【javascript】
-----次の行から(copy)-----
function read_theCookie_Exs2(theName) {
 theCookie_Value="";  //クッキーの内容を宣言
 theCookie=document.cookie + ";";  //クッキーの最後尾に ; 記号を付加
 Cookie_start=theCookie.indexOf(theName,0);  //cookie名(theName)があるかどうか検索

//保存されたクッキーに指定されたcookie名(theName)があった場合の措置
 if (Cookie_start!=-1) {   Cookie_end=theCookie.indexOf(";", Cookie_start);
   //Cookie_startを開始地点として次の「;」(クッキー内容の最後尾)の位置検索
  theCookie_Value=unescape(theCookie.substring(Cookie_start + theName.length +1, Cookie_end));
   //theCookieから指定範囲の切り出しとデコード
 }

 if (theCookie_Value=="") {
  alert("指定のデータ名[" + theName + "]はcookieに書き込まれていません。");
 } else if (theCookie_Value==";") {
  alert("指定のデータ名[" + theName + "]はcookieに存在しますがデータはすでに消去されています。");
 } else {
  alert("指定されたデータ名[" + theName + "]の値は["+ theCookie_Value + "]です。");
 }
}
-----上の行まで(copy)-----

◆クッキーの最後尾に「;」を付加
※theCookie=document.cookie + ";";
※クッキーをすべて表示したときの解説を参照して下さい。
◆クッキー内の指定文字を検索
※関数indexOf(theName)
※theCookie.indexOf(theName,0);でクッキーtheCookieの先頭(0文字目)からtheNameが含まれるかどうか調べます。戻り値は検索開始位置から検索された文字の位置です。見つからない場合は-1を返します。,0 は省略可能です。
※Cookie_start=theCookie.indexOf(theName,0);で、Cookie_start=クッキーtheCookie内における指定されたcookie名のある位置となります。
※Cookie_end=theCookie.indexOf(";", Cookie_start);では、Cookie_startを開始位置として次の「;」記号のある位置(すなわちデータ内容の最後尾)を検索します。
◆ASCII形式を文字にデコード
※関数unescape()
※unescape(***)で、エンコードされて保存されているデータ内容をデコードして取り出します。
◆文字列から指定された範囲を切り出す
※関数substring(開始位置,終了位置) ※theCookie.substring(Cookie_start + theName.length +1, Cookie_end)で、クッキーtheCookieから [Cookie_start + theName.length +1 ] 〜 [Cookie_end]の範囲を切り出します。
※[Cookie_start + theName.length +1]とはデータ内容の次の位置、です。
◆判定条件
※theCookie_Value=unescape(theCookie.substring(Cookie_start + theName.length +1, Cookie_end));の戻り値
  theCookie_Value==""---該当するcookie名がない
  theCookie_Value==";"---該当するcookie名はあるがデータ内容が消去されている
となります。

topへ目次へ前へ次へ
【技b007-3】クッキーに書き込まれたデータを消去する
  cookie名:
webStudio_cookie_00
webStudio_cookie_99
■指定したデータを消去する
 データ毎に消去します。リンク文字をクリックして下さい。
併せて「書き込む」「読み込む」機能を設置しました。交互に実行して動作を確認して下さい。
  webStudio_cookie_00を消去する / 読み込む / 書き込む
  webStudio_cookie_99を消去する / 読み込む / 書き込む

■スクリプト

◆手順1【スクリプトの実行】
※引数として「消去するcookie名」を渡します

-----次の行から(copy)-----
<a href="javascript://" onclick="del_theCookie_Exs('webStudio_cookie_00')">webStudio_cookie_00を消去する</a>
-----上の行まで(copy)-----

◆手順2【javascript】
※クッキーに保存したデータを消去するには、保存期限を現在より過去にしてcookieを上書きします。

-----次の行から(copy)-----
function del_theCookie_Exs(theName) {
 document.cookie=theName + "=;expires=Thu,01-Jan-70 00:00:01 GMT";
}
-----上の行まで(copy)-----

■保存されたクッキー

◆保存場所及びクッキーのファイル名
※windowsXPの場合、クッキーは[C:\Documents and Settings\(コンピュータ名)\Cookies]に保存されます。
※【b007-1】で作成されたファイルに書き込まれています。
◆保存内容
※cookie名・パス名・保存期限は残っていますが、データ内容は消去されています。
-----次の行から(copy)-----

webStudio_cookie_00
            (←データ内容が消去されている)
~~local~~/D:\www\WEB工房\web_studio\tech_b\
1088
667801216
34459479
2626001456
29683414
*
webStudio_cookie_99
            (←データ内容が消去されている)
~~local~~/D:\www\WEB工房\web_studio\tech_b\
1088
667801216
34459479
2651831456
29683414
*
-----上の行まで(copy)-----
■保存されたクッキーの削除
※保存されたクッキーを完全に削除するには、クッキーの保存されたファイルを削除するのが一番確実です。
※保存されたファイルをオープンして内容を変更して上書きしたりすることは避けた方が無難です。

topへ目次へ前へ次へ
【技b007-4】その他のクッキー技
■クッキーの書き込みができない場合は
警告する
◆手順【javascript】
※クッキーを書き込んだ直後に、下記のif文を記述します。

-----次の行から(copy)-----
...
document.cookie=theName + "=" + escape(theCookie_Value) + ";expires=" + theCookie_expDay;  //書き込み

if (!navigator.cookieEnabled) {
 alert("クッキーへの書き込みができません。");
}
-----上の行まで(copy)-----

◆解説】
※クッキーが有効でない場合やクッキーの書き込みに失敗した場合等に使えるかも
※クッキーを有効にしていない人も多い様なので、「クッキーを有効にしないさい」と強制するのも如何なものかとは思いますね。トラブル回避等に使用してもよいと思います。

■パスを設定する
(クッキーを発行するhtmlファイルのパス以外)


他の例ではパスは自動取得でした。
クッキーを書き込むときパスが指定できます。
【技b007-1】と比べてみて下さい。

webStudio_cookie_999を書き込む
読み込む/消去する
◆クッキーに書き込む
-----次の行から(copy)-----
function write_theCookie_Exs3() {
 theName="webStudio_cookie_999";
 theCookie_Value="パス指定してます/stuvwxyz";
 theCookie_Day="28,Feb 2099";
 theCookie_Path="/web_studio/tech_b/b007/";

 setDay=new Date(theCookie_Day);
 theCookie_expDay=setDay.toGMTString();
 document.cookie=theName + "=" + escape(theCookie_Value) + ";path=" + theCookie_Path + ";expires=" + theCookie_expDay;

 alert("指定のデータ名[" + theName + "]の値[" + theCookie_Value + "]をcookieに保存しました。");
}
-----上の行まで(copy)-----

◆ドメイン・パス名を指定するわけと注意
※ドメイン・パス指定を省略すると、この部分は自動的にクッキーを発行するhtmlファイルのドメイン・パス名となります。
※従って「ドメイン・パス指定」は、別のフォルダを指定するときに実行すればいいわけです。
※ここで発行したクッキーを他のフォルダのhtml文書で読み込みたいとき等に有効です。

※故に、クッキーを発行した文書からはこのクッキーは読み込んだり消去したりはできないようです。指定したドメイン・パス名の文書からのみ読み込み・消去が可能です。
※本例では「読み込み」「消去」は、一度「指定パス」先に保存したファイルをオープンして、そのファイルから実行するようにしています。

◆ドメイン・パス指定方法
※ドメインは自動取得ですが、パスを指定します。
※http://www.bestcare.co.jp/web_studio/tech_b/b007/のとき
   ドメイン名 bestcare.co.jp
   パス名 /web_studio/tech_b/b007/
となります。上記例ではtheCookie_Path="/web_studio/tech_b/b007/";としています。
◆保存ファイル名
※保存されるファイルは (コンピュータ名)@b007[1].txt というようになります。
※「解説」コーナーにあるサンプル(メールを送るフォーム)も同一フォルダ上にあり、このサンプルで発行したクッキーも同じテキストファイルに保存されます。サンプルを用いた後、クッキーの保存ファイルを確認してみて下さい。

■保存期限を年月日でなくて、
○日後に設定する

◆手順【javascript】
※クッキーを発行したときの保存期限の記述を変更して下さい。

※変更前
-----次の行から(copy)-----
theCookie_Day="28,Feb 2006"; //保存期限(年月日)
setDay=new Date(theCookie_Day); //新規オブジェクトの宣言

theCookie_expDay=setDay.toGMTString(); //世界標準時(GMT)に変換

document.cookie=theName + "=" + escape(theCookie_Value) + ";expires=" + theCookie_expDay;
-----上の行まで(copy)-----
※変更後
-----次の行から(copy)-----
theCookie_Day=30; //保存期限(日)
setDay=new Date(); //新規オブジェクトの宣言
setDay.setTime(setDay.getTime() + theCookie_Day*1000*60*60*24);

theCookie_expDay=setDay.toGMTString();

document.cookie=theName + "=" + escape(theCookie_Value) + ";expires=" + theCookie_expDay;
-----上の行まで(copy)-----

◆解説
※getTime()メソッド---
  現在の時間(1970年1月1日0時0分0秒からの経過時間)をミリ秒単位で取得します。
※theCookie_Day*1000*60*60*24);で、theCookie_Day(日)後の時間をミリ秒単位に変換しています。
※setTimeオブジェクト
  ミリ秒単位で日付と時間を設定します。GMTへの変換は、このあとで行います。

topへ目次へ前へ次へ
【技b007-5】フォームへの入力データをクッキーに書き込む/読み込む/消去する(応用技)

cookie名 
データ内容
保存期限 
左の各フォームにデータを入力の上、各ボタンをクリックして交互に結果を確認して下さい。
※データ内容は任意です。漢字・全角文字の使用も可能です。
※保存期限は[1〜999](日)の半角の整数で指定して下さい。

■【スクリプトの実行】
-----次の行から(copy)-----
<form name="FORM_1">
 cookie名 <select name="txtBox_1_1">
  <option value="webStudio_cookie_01" selected> webStudio_cookie_01 </option>
  <option value="webStudio_cookie_02"> webStudio_cookie_02 </option>
  <option value="webStudio_cookie_03"> webStudio_cookie_03 </option>
 </select>
 データ内容 <input type="text" name="txtBox_1_2" size="30">;
 保存期限  <input type="text" name="txtBox_1_3" size="30">;

 <input type="button" value="書き込む" onclick="write_theCookie()">
 <input type="button" value="読み込む" onclick="read_theCookie()">
 <input type="button" value="消去する" onclick="del_theCookie()">
</form>
-----上の行まで(copy)-----

■【javascript】
※クッキーの保存されているテキストファイルはすべて同じです。

◆クッキーに書き込む
-----次の行から(copy)-----
function write_theCookie() {
 theName=FORM_1.txtBox_1_1.value;
 theCookie_Value=FORM_1.txtBox_1_2.value;
 theCookie_Day=FORM_1.txtBox_1_3.value;  //保存期限(日)

 if ((theCookie_Value=="") || (theCookie_Day=="")) {
  alert ("cookieに保存するデータ及び保存期限を入力して下さい。");
  return false;
 }

 if ((theCookie_Day<=0)||(theCookie_Day>=1000)) {
  alert ("cookieに保存するデータ及び保存期限は[1]〜[999]日の範囲で指定して下さい。");
  return false;
 }

 setDay=new Date();  setDay.setTime(setDay.getTime() + theCookie_Day*1000*60*60*24);
 theCookie_expDay=setDay.toGMTString();
 document.cookie=theName + "=" + escape(theCookie_Value) + ";expires=" + theCookie_expDay;

 if (!navigator.cookieEnabled) {
  alert("クッキーへの書き込みができません。ブラウザのセキュリティ等の設定を確認して下さい。");
  return false;
 }

 alert("指定のデータ名[" + theName + "]の値[" + theCookie_Value + "]をcookieに保存しました。");
}
-----上の行まで(copy)-----

◆クッキーから読み込む
-----次の行から(copy)-----
function read_theCookie() {
 theName=FORM_1.txtBox_1_1.value;
 theCookie=document.cookie + ";";
 theCookie_Data="";
 Cookie_start=theCookie.indexOf(theName);

 if (Cookie_start!=-1) {
  Cookie_end=theCookie.indexOf(";", Cookie_start);
  theCookie_Data=unescape(theCookie.substring(Cookie_start + theName.length +1, Cookie_end));
 }

 if (theCookie_Data=="") {
  alert("指定のデータ名[" + theName + "]はcookieに書き込まれていません。");
 } else if (theCookie_Data==";") {
  alert("指定のデータ名[" + theName + "]はcookieに存在しますがデータは消去されています。");
 } else {
  FORM_1.txtBox_1_2.value=theCookie_Data;
  alert("cookieに保存された指定のデータ名[" + theName + "]の値は["+ theCookie_Data + "]です。");
 }
}
-----上の行まで(copy)-----

◆クッキーデータを消去する
-----次の行から(copy)-----
function del_theCookie() {
 theName=FORM_1.txtBox_1_1.value;

 theCookie_Data="";
 theCookie=document.cookie + ";";
 Cookie_start=theCookie.indexOf(theName);

 if (Cookie_start!=-1) {
  Cookie_end=theCookie.indexOf(";", Cookie_start);
  theCookie_Data=unescape(theCookie.substring(Cookie_start + theName.length +1, Cookie_end));  }

 if (theCookie_Data=="") {
  alert("指定のデータ名[" + theName + "]はcookieに書き込まれていないので消去できません。");
 } else if (theCookie_Data==";") {
  alert("指定のデータ名[" + theName + "]はcookieに存在しますがデータはすでに消去されています。");
 } else {
  Conf="消去指定されたデータ名[" + theName + "]の値は["+ theCookie_Data + "]です。消去していいですか。";
   if (confirm(Conf)) {
    document.cookie=theName + "=;expires=Thu,01-Jan-70 00:00:01 GMT";
    alert("消去指定されたデータ名[" + theName + "](["+ theCookie_Data + "])を消去しました。");
   }
 }
}
-----上の行まで(copy)-----

topへ目次へ前へ

解説等

◆cookieは非常に面白い技ですが、いろいろ悪用されたりすることもあったりデータ流出の原因になったりして忌避する向きもあるようです。正しく理解した上で、適正に使用されることをお勧めします。
※ここでcookieを理解した上、一度、自分のパソコンのクッキーの内容を調べてみたらよろしいかと思います。よくもまあ、こんなに使われているもんだ、と感心ばかりしていられないかも知れませんよ。

【サンプル(1)】  メールを送るフォームでクッキーを活用するサンプル

keyword

◇cookie◇toGMTString◇escape

history

◇(2004.12.31)設置

注意

◆操作MENUの[Window Resize]を選択するとウィンドウサイズが変更可能です。
◆上記の[web技]をクリップボードにコピーしテキストエディタに貼り付けて使用する場合は、表示のための改行記号や全角・半角スペースの記号等を削除して下さい。
-----次の行から(copy)-----
(この部分をクリップボードにコピーしてテキストエディタ等に貼り付けて下さい)
-----上の行まで(copy)-----

access count