web-dev-qa-db-ja.com

cookieから値を作成して読み取る方法

JavaScriptでCookieから値を作成して読み取る方法

245

クッキーの作成と取得に使用できる機能は次のとおりです。

var createCookie = function(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 "";
}
220

JQueryクッキー

またはプレーン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);
      }
   }
}
39
Paul McCowat

ミニマルでフル機能の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)
}
36
artnikpro

Mozillaは 完全なUnicodeサポートを備えたクッキーを読み書きするためのシンプルなフレームワーク _をそれの使い方の例と共に提供します。

ページに含まれたら、クッキーを設定できます。

docCookies.setItem(name, value);

クッキーを読む:

docCookies.getItem(name);

またはクッキーを削除する:

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ページ の他の例や詳細を参照してください。

14
Brendan Nee

私はこのスレッドの受け入れられた答えをすでに何度も使用しました。それは素晴らしいコードです:シンプルで使いやすいです。しかし、私はたいてい 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';
6
Lukas

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オプションをサポートし、 "days"を追加します。

  • path: '/' - 任意の絶対パス。 デフォルト:現在のドキュメントの場所
  • domain: 'sub.example.com' - ドットで始まっていない可能性があります。 デフォルト:サブドメインなしの現在のホスト。
  • secure:true - https経由でのみcookieを提供します。 デフォルト:false.
  • 日数:2 - クッキーの有効期限が切れるまで。 デフォルト:セッション終了。
    有効期限を設定するための代替方法:
    • expires: 'Sun、2018年2月18日16:23:42 GMT' - GMT文字列としての有効期限。
      現在の日付はnew date(Date.now())。toUTCString()で取得できます。
    • 'max-age':30 - 日数と同じですが、日数ではなく秒数です。

他の回答では、より古いIEバージョンをサポートするために "max-age"の代わりに "expires"を使用します。この方法はES7を必要とします、従ってIE7はとにかくアウトです(これは大したことではないです)。

注意: "="や "{:}"のような変な文字はクッキーの値としてサポートされています、そしてregexは(他のライブラリからの)前後の空白を処理します。
オブジェクトを保存したい場合は、前後にそれらをエンコードし、JSON.stringifyおよびJSON.parseを使用して上記を編集するか、別のメソッドを追加します。例えば:

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

{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'
6
Angel

これが 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/

4
Shubham Kumar

私はこの物を使います。値はエンコードされているので、サーバー側から読み書きするときに考慮する必要があります。

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

})();
2
sinuhepop

ES6でクッキーを読むための簡単な方法。

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

クッキーの取得/設定/削除にはmy cookie ESモジュール を使うことができます。

使用法:

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

<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()

あなたのウェブブラウザでクッキーは有効になっていますか?

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' );

使用例

0
Andrej

私は成功するために js-cookie を使用しました。

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