任何人都可以向我解释document.cookie

时间:2011-01-16 12:39:24

标签: javascript cookies

我在w3schoool JavaScript cookie部分找到了这段代码,即读取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 个答案:

答案 0 :(得分:4)

document.cookie返回包含cookie的字符串。你问的其他一切都是非常标准的javascript字符串操作。

if (document.cookie.length > 0)

检查字符串是否为空。

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

查找字符串中第一次出现COOKIENAME=子字符串的索引。

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字符的第一个匹配项,如果找不到该字符,则会将其定位到字符串的末尾。

答案 1 :(得分:3)

请参阅:https://developer.mozilla.org/en/DOM/document.cookie

document.cookie是一个字符串,其中key = value对由分号(;)分隔。

您粘贴的代码会查找字符串中的特定键,然后通过查找字符串的结尾或下一个分号来查找其值,并返回找到的值

所以例如,如果document.cookie ===“someKey = aCookieMadeMeHaveValue7; anotherKey = aShorterValue”,你可以通过执行函数getCookie('someKey')搜索someKey的值,该函数将查看字符串,并返回'aCookieMadeMeHaveValue7'。

它会向该位置添加+1以跳过'=',然后从那里返回字符串,直到它第一次看到';'或者到了字符串的末尾。

答案 2 :(得分:0)

好的,快速回答。首先,document.cookie是一个字符串,包含此域中每个Cookie集的key=value对。

(1)if (document.cookie.length>0)检查是否设置了一些cookie,即该字符串不为空。

(2)c_start=document.cookie.indexOf(c_name + "=");需要=以确保{cookie}值内的c_name不会出现在密钥中。

(3)c_start=c_start + c_name.length+1; c_start是在字符串中找到密钥的位置。然后,您需要添加键的长度加一(对于=)以查找值的开头。

(4)if (c_end==-1) c_end=document.cookie.length;如果cookie是最后一个,则不会终止;,所以我们会寻找字符串的最后一部分。

答案 3 :(得分:0)

document.cookie是一个字符串,length属性保存字符串的长度。

=附加到cookie名称,因为cookie名称也可能出现在document.cookie字符串中的其他位置(例如另一个cookie的cookie值)。使用c_name.length+1是因为+1反映了Cookie名称后面的=。如果在大海捞针中找不到针,indexOf会返回-1;这就是c_end-1进行比较的原因。

但是你不应该使用这个实现。看看my answer to Javascript getCookie functions,看看它为什么会出错,以及更好的实现方式。