JavaScript クッキー

❮ 前章へ 次章へ ❯

クッキーを使用すると、Web ページにユーザ情報を保存できます。


クッキーとは何ですか?

クッキーは、コンピュータ上の小さなテキストファイルに保存されたデータです。

Webサーバは、Webページをブラウザーに送信してしまうと、接続はシャットダウンされ、サーバはユーザに関するすべてを忘れてしまいます。

クッキーは、「ユーザに関する情報をどうのように記憶するか」という問題を解決するために考案されました:

クッキーには、次のような名前と値のペアで保存されます:

username = John Doe

ブラウザがサーバからWebページを要求すると、そのページに属するクッキーがリクエストに追加されます。 このようにして、サーバは必要なデータとしてユーザに関する「記憶」情報を取得します。


JavaScriptでクッキーを作成する

JavaScriptは、document.cookie プロパティを使用してクッキーの作成、入力、削除を行うことができます。

JavaScriptを使用すると、次のようにクッキーを作成できます:

document.cookie = "username=John Doe";

有効期限(UTC時間)を追加することもできます。デフォルトでは、ブラウザを閉じたときにクッキーは削除されます:

document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC";

path パラメータを使用すると、クッキーがどのパスに属しているのかをブラウザに知らせることができます。 デフォルトでは、クッキーは現在のページに属します。

document.cookie = "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";

JavaScriptでクッキーを読む

JavaScriptを使用すると、クッキーは次のように読むことができます:

var x = document.cookie;

document.cookieは、cookie1=value; cookie2=value; cookie3=value; のように、すべてのクッキーを1つの文字列で返します


JavaScriptでクッキーを変更する

JavaScriptを使用すると、作成時と同じ方法でクッキーを変更できます:

document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";

古いクッキーは上書きされます。


JavaScriptでクッキーを削除する

クッキーを削除するのは非常に簡単です。

クッキーを削除するときに、クッキーの値を指定する必要はありません。

expiresパラメータに渡す日付を設定します:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

正しくクッキーの削除を確実にするには、クッキーのパスを明示する必要があります。

パスを指定しないと、ブラウザによってはクッキーを削除できない場合があります。


クッキー文字列

document.cookie プロパティは、通常のテキスト文字列のように見えます。しかし、そうではありません。

document.cookieにクッキー文字列全体を書き込んだとしても、それを再び読んだ場合、その名前と値のペアしか見ることができません。

新規のクッキーを設定した場合、古いクッキーは上書きされません。 T新しいクッキーがdocument.cookieに追加されるので、document.cookieをもう一度読むと次のようなものが得られます:

cookie1 = value; cookie2 = value;

     

指定した1つのクッキーの値を検索したい場合は、文字列内のクッキーの値を検索するJavaScript関数を記述する必要があります。


JavaScript クッキーの例

以下の例では、訪問者の名前を格納するクッキーを作成します。

訪問者がwebページに初めて訪れたときに、名前を記入するように促されます。次に、その名前はクッキーに保存されます。

次回、訪問者が同じページを訪れると、歓迎のメッセージが表示されます。

この例では、次の3つのJavaScript関数を作成します:

  1. クッキー値を設定する関数
  2. クッキー値を取得する関数
  3. クッキー値をチェックする関数

クッキーを設定する関数

まず、訪問者の名前をクッキー変数に格納する関数を作成します:

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

例の説明:

上の関数のパラメータは、クッキーの名前(cname)、クッキーの値(cvalue)、およびクッキーが期限切れになるまでの日数(exdays)です。

この関数は、クッキー名、クッキーの値、有効期限文字列を一緒に追加することでクッキーを設定します。


クッキーを取得する関数

次に、指定したクッキーの値を返す関数を作成します:

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

関数の説明:

Tクッキー名(cname)をパラメータとして使用します。

検索するテキスト(cname + "=")用の変数(name)を作成します。

特殊文字('$'など)を含むクッキーを処理するため、クッキー文字列をデコードします。

セミコロンで、document.cookieをcaという配列に分割します(ca = decodedCookie.split(';'))。

ca 配列をループし(i = 0; i < ca.length; i++)、各値 c = ca[i] を読み込みます。

クッキーが見つかった場合(c.indexOf(name) == 0)、クッキーの値(c.substring(name.length, c.length)を返します。

クッキーが見つからない場合は、"" を返します。


クッキーをチェックする関数

最後に、クッキーが設定されているかどうかを調べる関数を作成します。

クッキーが設定されている場合は、挨拶が表示されます。

クッキーが設定されていない場合、プロンプトボックスが表示され、ユーザの名前を尋ね、setCookie関数を呼び出して365日間 usernameクッキーを保存します:

function checkCookie() {
    var username = getCookie("username");
    if (username != "") {
        alert("Welcome again " + username);
    } else {
        username = prompt("Please enter your name:", "");
        if (username != "" && username != null) {
            setCookie("username", username, 365);
        }
    }
}

全関数を一緒にまとめます

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

function checkCookie() {
    var user = getCookie("username");
    if (user != "") {
        alert("Welcome again " + user);
    } else {
        user = prompt("Please enter your name:", "");
        if (user != "" && user != null) {
            setCookie("username", user, 365);
        }
    }
}
Try it Yourself »

上の例では、ページがロードされると checkCookie() 関数が実行されます。


❮ 前章へ 次章へ ❯