Каков наилучший способ получить cookie по имени в JavaScript? - PullRequest
6 голосов
/ 26 сентября 2008

Я использую прототип и не могу найти никаких встроенных расширений для установки или получения файлов cookie. Немного погуглив, я вижу несколько разных способов сделать это. Мне было интересно, что вы думаете, это лучший подход для получения cookie в JavaScript?

Ответы [ 4 ]

9 голосов
/ 08 октября 2008

Я использую эту процедуру:

function ReadCookie(name)
{
  name += '=';
  var parts = document.cookie.split(/;\s*/);
  for (var i = 0; i < parts.length; i++)
  {
    var part = parts[i];
    if (part.indexOf(name) == 0)
      return part.substring(name.length)
  }
  return null;
}

Работает довольно хорошо.

2 голосов
/ 20 июня 2012

На случай, если кому-то еще это понадобится, я исправил код Диодея , чтобы устранить озабоченность PhiLho частичными совпадениями при попытке получить значение cookie.

function getCookie(c_name) {
    var nameEQ = c_name + '=';
    var c_start = 0;
    var c_end = 0;
    if (document.cookie.substr(0, nameEQ.length) === nameEQ) {
        return document.cookie.substring(nameEQ.length, document.cookie.indexOf(';', nameEQ.length));
    } else {
        c_start = document.cookie.indexOf('; ' + nameEQ);
        if(c_start !== -1){
            c_start += nameEQ.length + 2;
            c_end = document.cookie.indexOf(';', c_start);
            if (c_end === -1) {c_end = document.cookie.length;}
            return document.cookie.substring(c_start, c_end);
        }
    }
    return null;
}

Недавно я также создал гораздо более компактный RegExp, который также должен работать:

function getCookie(c_name){
    var ret = window.testCookie.match(new RegExp("(?:^|;)\\s*"+c_name+"=([^;]*)"));
    return (ret !== null ? ret[1] : null);
}

Я провел несколько тестов скорости, которые, по-видимому, указывают на то, что из PhiLo, QuirksMode и этих двух реализаций версия, отличная от RegExp (использующая indexOf очень быстрая, а не удивительная) выше, является самой быстрой. http://jsperf.com/cookie-fetcher

2 голосов
/ 26 сентября 2008

Каждый раз, когда мне нужно получить к нему доступ, я использую document.cookie , в основном, как это описано в этой статье. Предостережение, я никогда не использовал прототип, поэтому там могут быть более простые методы, с которыми вы просто не сталкивались.

0 голосов
/ 26 сентября 2008

Я использую это. Это было надежно:

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

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...