Cookieから値を作成して読み取る方法を教えてください。


274

JavaScriptでCookieから値を作成して読み取るにはどうすればよいですか?



FWIW、js-cookieは、それを処理するための非常に優れたAPIを提供します。
Fagner Brack 2015年

このガイドはJavaScript Cookieで確認できます
Shubham Kumar

状況によっては、Web Storage APIがCookieの代わりになる可能性があることを忘れないでください。
MattBianco 2017

回答:


234

Cookieの作成と取得に使用できる関数は次のとおりです。

function createCookie(name, value, days) {
    var expires;
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
    }
    else {
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) {
                c_end = document.cookie.length;
            }
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

23
これは、Cookieの値に適切にエンコード/デコードできないものが含まれている場合は機能しません。w3schoolsの1つは美しいようです
Richard Rout

13
Mozillaのこのシンプルなラッパーは、明示的なユニコードのサポートについても言及しています
Brad Parks

4
@BradParks GPLでリリースされたのは残念です。
ジャフ2014

1
IEはCookie名の後に等号(=)を追加しないため、Cookieに値がない場合、これはIE8または9では機能しません。indexOf( "=")==-1かどうかを確認し、そうである場合はCookie全体をCookie名として使用します。
Mohoch 2014年

:@jahuそして、私はそれがパブリックドメインにもあると言うでしょうdeveloper.mozilla.org/en-US/docs/MDN/...
Chronial

52

ミニマルでフル機能のES6アプローチ:

const setCookie = (name, value, days = 7, path = '/') => {
  const expires = new Date(Date.now() + days * 864e5).toUTCString()
  document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path
}

const getCookie = (name) => {
  return document.cookie.split('; ').reduce((r, v) => {
    const parts = v.split('=')
    return parts[0] === name ? decodeURIComponent(parts[1]) : r
  }, '')
}

const deleteCookie = (name, path) => {
  setCookie(name, '', -1, path)
}

2
toGMTString()廃止予定ですtoUTCString()。代わりに使用してください。
Thanh Nguyen

@nguyenThanh Thx!更新
artnikpro

1
Cookieの値自体に=符号が含まれている場合があります。その場合、関数getCookieは予期しない結果を生成します。これを回避するには、次の矢印関数本体をreduce内で使用することを検討してくださいconst [n, ...val] = v.split('='); return n === name ? decodeURIComponent(val.join('=')) : r
Dmitriy Zhura

ただし、有効期限を未設定のままにするオプションがあると便利です。これにより、ブラウザの終了時にCookieが自動的に削除されます。
xji 2018年

4
864e5 = 86400000 = 1000*60*60*241日24時間のミリ秒数を表します。
Henrikh Kantuni

41

jQuery Cookie

またはプレーンJavaScript:

function setCookie(c_name,value,exdays)
{
   var exdate=new Date();
   exdate.setDate(exdate.getDate() + exdays);
   var c_value=escape(value) + ((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
   document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name)
{
   var i,x,y,ARRcookies=document.cookie.split(";");
   for (i=0; i<ARRcookies.length; i++)
   {
      x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
      y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
      x=x.replace(/^\s+|\s+$/g,"");
      if (x==c_name)
      {
        return unescape(y);
      }
   }
}

1
これは主にJQuery Cookieについて言及したためです。私はそれをお勧めします。コードは非常に小さく、すでにJQueryを使用している場合は、それを使用するのが適切です。
w0rp 2014年

17

Mozillaは、Unicodeを完全にサポートするCookieを読み書きするためのシンプルなフレームワークを提供しますと、その使用例を提供します。

ページに含まれると、Cookieを設定できます。

docCookies.setItem(name, value);

クッキーを読む:

docCookies.getItem(name);

またはCookieを削除します。

docCookies.removeItem(name);

例えば:

// sets a cookie called 'myCookie' with value 'Chocolate Chip'
docCookies.setItem('myCookie', 'Chocolate Chip');

// reads the value of a cookie called 'myCookie' and assigns to variable
var myCookie = docCookies.getItem('myCookie');

// removes the cookie called 'myCookie'
docCookies.removeItem('myCookie');

その他の例と詳細については、Mozillaのdocument.cookieページをご覧ください

この単純なjsファイルのバージョンはgithubにあります。


2
MDNで提供されるCookieライブラリは、LGPLではなくGPLでリリースされることに注意してください。
すべての労働者は必須

どのJavaScriptファイルをインポートする必要がありますか?それを見つけることができませんでした:(
AlikElzin-kilaka

:このページの「ライブラリ」の下のセクションを参照してください。developer.mozilla.org/en-US/docs/Web/API/document/...をファイルに保存し、それを含めるか、jsの既存のファイル場所に貼り付けることができます-あなたはそれを使いたいのです。
Brendan Nee

スタンドアロンのJavaScriptファイルはありませんか?つまり、実際のライブラリではなく、コードスニペットです。
AlikElzin-kilaka 2015

素晴らしい入力!「ライブラリ」は〜80行の単一の.jsファイルです。これは(GitHub上の)このファイルです:github.com/madmurphy/cookies.js/blob/master/cookies.js
Philipp

8

ES7、get()に正規表現を使用。MDNに基づく

const Cookie =
    { get: name => {
        let c = document.cookie.match(`(?:(?:^|.*; *)${name} *= *([^;]*).*$)|^.*$`)[1]
        if (c) return decodeURIComponent(c)
        }
    , set: (name, value, opts = {}) => { 
        if (opts.days) { 
            opts['max-age'] = opts.days * 60 * 60 * 24; 
            delete opts.days 
            }
        opts = Object.entries(opts).reduce((str, [k, v]) => `${str}; ${k}=${v}`, '')
        document.cookie = name + '=' + encodeURIComponent(value) + opts
        }
    , delete: (name, opts) => Cookie.set(name, '', {'max-age': -1, ...opts}) 
    // path & domain must match cookie being deleted 
    }

Cookie.set('user', 'Jim', {path: '/', days: 10}) 
// Set the path to top level (instead of page) and expiration to 10 days (instead of session)

使用法-Cookie.get(name、value [、options]):
optionsはすべての標準Cookieオプションをサポートし、「日」を追加します:

  • path: '/'-任意の絶対パス。デフォルト:現在のドキュメントの場所、
  • domain: 'sub.example.com'-ドットで始めることはできません。デフォルト:サブドメインのない現在のホスト。
  • secure:true-https経由でのみCookieを提供します。デフォルト:false。
  • days:2-Cookieの有効期限が切れるまでの日数。デフォルト:セッションの終了。
    有効期限を設定する別の方法:
    • 期限切れになった:「日、2018年2月18日午後4時23分42秒GMT」 -有効期限の日付GMT文字列として。
      現在の日付は次のようにして取得できます:new Date(Date.now())。toUTCString()
    • 'max-age':30-日と同じですが、日ではなく秒単位です。

その他の回答では、「max-age」の代わりに「expires」を使用して、古いIEバージョンをサポートしています。この方法ではES7が必要なので、IE7はとにかく公開されます(これは大した問題ではありません)。

注:「=」や「{:}」などの変な文字はCookie値としてサポートされており、正規表現は先頭と末尾の空白(他のライブラリからのもの)を処理します。
オブジェクトを保存する場合は、JSON.stringifyとJSON.parseを使用して前後にエンコードするか、上記を編集するか、別のメソッドを追加します。例えば:

Cookie.getJSON = name => JSON.parse(Cookie.get(name))
Cookie.setJSON = (name, value, opts) => Cookie.set(name, JSON.stringify(value), opts);

反対投票者は私の方法の何が悪いのか親切に説明しますか?
SamGoody

1
1.短く、IMOの保守が容易です。2.より完全です(安全な引数の順序、max-ageを受け入れる唯一の答えです)。3.より多くの標準のデフォルト(ここでのほとんどの回答とは異なり、パスなどのデフォルトは標準に設定されています)。4.ベストプラクティス(MDNによると、正規表現は値を抽出する最も信頼できる方法です)。5. Futureprook(より多くのオプションがCookieに追加された場合、それらは維持されます)。6. 1つのオブジェクトがコードを汚染するのは、関数の束よりも少ない。7.取得、設定、削除、メソッドの追加が簡単。8. ES7(おいしい流行語)。
SamGoody

7

{foo: 'bar'}のような保存オブジェクトが必要な人のために、編集したバージョンの@KevinBurkeの回答を共有します。JSON.stringifyとJSON.parseを追加しました。

cookie = {

    set: function (name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        }
        else
            var expires = "";
        document.cookie = name + "=" + JSON.stringify(value) + expires + "; path=/";
    },

    get : function(name){
        var nameEQ = name + "=",
            ca = document.cookie.split(';');

        for(var i=0;i < ca.length;i++) {
          var c = ca[i];
          while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) 
              return  JSON.parse(c.substring(nameEQ.length,c.length));
        }

        return null;
    }

}

だから、今あなたはこのようなことをすることができます:

cookie.set('cookie_key', {foo: 'bar'}, 30);

cookie.get('cookie_key'); // {foo: 'bar'}

cookie.set('cookie_key', 'baz', 30);

cookie.get('cookie_key'); // 'baz'

5

私はこのスレッドの受け入れられた答えをすでに何度も使用しています。シンプルで使いやすい、すばらしいコードです。しかし、私は通常babelとES6とモジュールを使用するので、あなたが私のような人なら、ここにES6での開発を高速化するためにコピーするコードがあります

受け入れられた回答はES6でモジュールとして書き直されました:

export const createCookie = ({name, value, days}) => {
  let expires;
  if (days) {
    let date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = '; expires=' + date.toGMTString();
  } else {
    expires = '';
  }
  document.cookie = name + '=' + value + expires + '; path=/';
};

export const getCookie = ({name}) => {
  if (document.cookie.length > 0) {
    let c_start = document.cookie.indexOf(name + '=');
    if (c_start !== -1) {
      c_start = c_start + name.length + 1;
      let c_end = document.cookie.indexOf(';', c_start);
      if (c_end === -1) {
        c_end = document.cookie.length;
      }
      return unescape(document.cookie.substring(c_start, c_end));
    }
  }
  return '';
};

そして、この後、単純にそれを任意のモジュールとしてインポートできます(もちろんパスは異なる場合があります):

import {createCookie, getCookie} from './../helpers/Cookie';

5

JavaScriptでCookie取得、設定、削除するためのコードを次に示します

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

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

ソース:http : //mycodingtricks.com/snippets/javascript/javascript-cookies/


2

このオブジェクトを使用します。値はエンコードされているため、サーバー側から読み取りまたは書き込みを行うときに考慮する必要があります。

cookie = (function() {

/**
 * Sets a cookie value. seconds parameter is optional
 */
var set = function(name, value, seconds) {
    var expires = seconds ? '; expires=' + new Date(new Date().getTime() + seconds * 1000).toGMTString() : '';
    document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/';
};

var map = function() {
    var map = {};
    var kvs = document.cookie.split('; ');
    for (var i = 0; i < kvs.length; i++) {
        var kv = kvs[i].split('=');
        map[kv[0]] = decodeURIComponent(kv[1]);
    }
    return map;
};

var get = function(name) {
    return map()[name];
};

var remove = function(name) {
    set(name, '', -1);
};

return {
    set: set,
    get: get,
    remove: remove,
    map: map
};

})();

0

ES6でCookieを読み取る簡単な方法。

function getCookies() {
    var cookies = {};
    for (let cookie of document.cookie.split('; ')) {
        let [name, value] = cookie.split("=");
        cookies[name] = decodeURIComponent(value);
    }
    console.dir(cookies);
}

0

私はjs-cookieを使用して成功しました。

<script src="/path/to/js.cookie.js"></script>
<script>
  Cookies.set('foo', 'bar');
  Cookies.get('foo');
</script>

0

私のクッキーESモジュールを使用できますget / set / remove cookieにを。

使用法:

ヘッドタグに次のコードを含めます。

<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.js"></script>

または

<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.min.js"></script>

これで、window.cookieを使用して、ユーザー情報をWebページに格納できます。

cookie.isEnabled()

WebブラウザーでCookieが有効になっていますか?

returns {boolean} true if cookie enabled.

if ( cookie.isEnabled() )
    console.log('cookie is enabled on your browser');
else
    console.error('cookie is disabled on your browser');

cookie.set(名前、値)

クッキーを設定します。

name: cookie name.
value: cookie value.

cookie.set('age', 25);

cookie.get(name [、defaultValue]);

クッキーを取得します。

name: cookie name.
defaultValue: cookie default value. Default is undefined.
returns cookie value or defaultValue if cookie was not found
var age = cookie.get('age', 25);

cookie.remove(name);

クッキーを削除します。

name: cookie name.
cookie.remove( 'age' );

使用例


-1

readCookieの改良版:

function readCookie( name )
{
    var cookieParts = document.cookie.split( ';' )
    ,   i           = 0
    ,   part
    ,   part_data
    ,   value
    ;

    while( part = cookieParts[ i++ ] )
    {
        part_data = part.split( '=' );

        if ( part_data.shift().replace(/\s/, '' ) === name )
        {
            value = part_data.shift();
            break;
        }

    }
    return value;
}

これは、Cookieの値を見つけてその値を返すとすぐに壊れます。私の意見では、二重分割で非常にエレガントです。

if条件の置換は空白のトリムであり、正しく一致することを確認します


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

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, 30);
       }
    }
}

-1

私は単純なcookieUtilsを作成しました。これには、Cookieの作成、Cookieの読み取り、およびCookieの削除のための3つの関数があります。

var CookieUtils = {
    createCookie: function (name, value, expireTime) {
        expireTime = !!expireTime ? expireTime : (15 * 60 * 1000); // Default 15 min
        var date = new Date();
        date.setTime(date.getTime() + expireTime);
        var expires = "; expires=" + date.toGMTString();
        document.cookie = name + "=" + value + expires + "; path=/";
    },
    getCookie: function (name) {
        var value = "; " + document.cookie;
        var parts = value.split("; " + name + "=");
        if (parts.length == 2) {
            return parts.pop().split(";").shift();
        }
    },
    deleteCookie: function(name) {
        document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
    }
};

-1

これは言及されたw3choolsの例です。

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 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 "";
}

-1

簡単な読み取り

var getCookie = function (name) {
    var valueStart = document.cookie.indexOf(name + "=") + name.length + 1;
    var valueEnd = document.cookie.indexOf(";", valueStart); 
    return document.cookie.slice(valueStart, valueEnd)
}

-2

Cookieを読み取る、生意気で簡単な方法は次のようになります。

let username, id; 
eval(document.cookie); 
console.log(username + ", " + id); // John Doe, 123

これは、Cookieに次のようなものが含まれていることがわかっている場合に使用できますusername="John Doe"; id=123;。文字列はCookieで引用符が必要になることに注意してください。おそらく推奨される方法ではありませんが、テスト/学習には有効です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.