有人能解释一下document.cookie吗?

3
我在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;

有人能回答我的问题吗?谢谢!!!

3
在你的之前的问题中,至少有一个问题已经得到了回答。不过,为什么不自己检查一下代码呢?你可以插入 alertconsole.log,查看变量的内容以及使用 +1 和不使用 +1 的区别... - Felix Kling
9
W3Schools是一个糟糕的参考网站。 - Gumbo
希望有一个维基百科,包含所有库和所有语言的所有参考资料。 不是成千上万的HTML参考资料,成千上万的C参考资料等等 :) - user142019
1
如果您想要一个好的cookie脚本,并且带有完整的解释,请参见:http://www.quirksmode.org/js/cookies.html - Yi Jiang
请参阅Javascript getCookie函数 - Gumbo
4个回答

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位置开始查找第一个出现的;字符,如果没有找到,则定位到字符串的末尾。


请修改您关于 c_start = document.cookie.indexOf(c_name + "="); 的回答;-) - ifaour

3
请参见:https://developer.mozilla.org/en/DOM/document.cookie document.cookie是一个字符串,其中键值对由分号(;)分隔。
你所粘贴的代码在字符串中查找特定键,然后通过查找字符串的末尾或下一个分号来查找其值,并返回它找到的值。
例如,如果document.cookie === "someKey=aCookieMadeMeHaveValue7;anotherKey=aShorterValue",则可以通过执行函数getCookie('someKey')来搜索someKey的值,该函数将查看字符串并返回'aCookieMadeMeHaveValue7'。
它会在该位置加上+1以跳过'=',然后从那里返回字符串,直到第一次看到';'或到达字符串的结尾。

0

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

(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 是最后一个,则没有终止符 ;,因此我们查找字符串的末尾。


0

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

= 被附加到 cookie 名称上,因为 cookie 名称也可能出现在 document.cookie 字符串的其他位置(比如另一个 cookie 的 cookie 值中)。c_name.length+1 之所以要加 1,是因为它反映了 cookie 名称后面的 =。而 indexOf 如果在字符串中找不到指定的子字符串,则返回 -1;这就是为什么要将 c_end-1 进行比较的原因。

但你不应该使用这种实现方式。查看 我对于 Javascript getCookie 函数 的回答,了解为什么它是错误的,以及更好的实现方式应该是怎样的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接