Любой может объяснить мне document.cookie - PullRequest
3 голосов
/ 16 января 2011

Я нашел этот код в разделе cookie w3schoool JavaScript, который должен прочитать cookie:

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

В этой строке:

if (document.cookie.length > 0)

что означает document.cookie.length?

В этой строке:

c_start = document.cookie.indexOf(c_name + "=");

почему мне нужно добавить = после c_name(cookie name)?

В этой строке:

c_start = c_start + c_name.length+1;

почему мне нужно добавить c_name.length+1?Какова цель?

И в чем смысл этой строки:

  if (c_end==-1) c_end = document.cookie.length;

Может кто-нибудь ответить на мой вопрос?Спасибо !!!

Ответы [ 4 ]

4 голосов
/ 16 января 2011

document.cookie возвращает строку, содержащую куки.Все остальное, о чем вы спрашиваете, - это довольно стандартное манипулирование строкой JavaScript.

if (document.cookie.length > 0)

проверяет, не является ли строка пустой.подстрока в строке.

c_start = c_start + c_name.length + 1;

позиционирует индекс после имени файла cookie в строке

c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) c_end = document.cookie.length;

пытается найти первое вхождение символа ;, начиная с c_start position и если этот символ не найден, он помещается в конец строки.

3 голосов
/ 16 января 2011

см .: https://developer.mozilla.org/en/DOM/document.cookie

document.cookie - это строка с парами ключ = значение, разделенными точками с запятой (;).

вставленный вами код ищет определенный ключ в строке, а затем находит его значение, ища конец строки или следующую точку с запятой и возвращая найденное значение

так, например, если document.cookie === "someKey = aCookieMadeMeHaveValue7; anotherKey = aShorterValue", вы можете искать значение someKey, выполняя функцию getCookie ('someKey'), которая будет смотреть на строку, и вернуть 'aCookieMadeMeHaveValue7'.

он добавит +1 к этой позиции, чтобы перепрыгнуть через '=', а затем вернет строку оттуда, пока в первый раз не увидит ';' или доходит до конца строки.

0 голосов
/ 16 января 2011

document.cookie является строкой, а свойство length содержит длину строки в символах.

= добавляется к имени файла cookie, поскольку имя файла cookieможет также появиться где-то еще в строке document.cookie (как в значении cookie другого cookie).c_name.length+1 используется, потому что +1 отражает = после имени файла cookie.И indexOf вернуть -1, если иголка не найдена в стоге сена;вот почему c_end сравнивается с -1.

Но вы не должны использовать эту реализацию.Взгляните на мой ответ на Javascript getCookie functions , чтобы понять, почему это неправильно и как может выглядеть лучшая реализация.

0 голосов
/ 16 января 2011

ОК, быстрые ответы. Во-первых, document.cookie - это строка, содержащая пары key=value для каждого файла cookie, установленного в этом домене.

(1) if (document.cookie.length>0) проверяет, установлены ли некоторые файлы cookie, т. Е. Строка не пуста.

(2) c_start=document.cookie.indexOf(c_name + "="); = необходим, чтобы убедиться, что c_name не встречается внутри значения cookie, только в ключе.

(3) c_start=c_start + c_name.length+1; c_start - это место, где был найден ключ в строке. Затем вам нужно добавить длину ключа плюс один (для =), чтобы найти начало значения.

(4) if (c_end==-1) c_end=document.cookie.length; Если файл cookie является последним, окончание не будет ;, поэтому вместо этого мы ищем самый конец строки.

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