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

Javascript 任何人都可以向我解释document.cookie,javascript,cookies,Javascript,Cookies,我在W3School 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_

我在W3School 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)
c_start = document.cookie.indexOf(c_name + "=");
c_start = c_start + c_name.length+1;
  if (c_end==-1) c_end = document.cookie.length;
document.cookie.length
是什么意思

在这方面:

if (document.cookie.length > 0)
c_start = document.cookie.indexOf(c_name + "=");
c_start = c_start + c_name.length+1;
  if (c_end==-1) c_end = document.cookie.length;
为什么我需要在
c_名称(cookie名称)
之后添加
=

在这方面:

if (document.cookie.length > 0)
c_start = document.cookie.indexOf(c_name + "=");
c_start = c_start + c_name.length+1;
  if (c_end==-1) c_end = document.cookie.length;
为什么我需要添加
c_name.length+1
?目的何在

这句话的意思是什么:

if (document.cookie.length > 0)
c_start = document.cookie.indexOf(c_name + "=");
c_start = c_start + c_name.length+1;
  if (c_end==-1) c_end = document.cookie.length;
有人能回答我的问题吗?谢谢

见:

document.cookie是一个字符串,键=值对由分号(;)分隔

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

因此,例如,如果document.cookie==“someKey=acookiemademadehavevalue7;另一个key=aShorterValue”,您可以通过执行函数getCookie('someKey')来搜索someKey的值,该函数将查看字符串,并返回“acookiemademadehavevalue7”


它将向该位置添加+1,以便跳过“=”,然后从那里返回字符串,直到它第一次看到“;”为止或位于字符串末尾。

文档。cookie
返回包含cookie的字符串。您询问的所有其他内容都是相当标准的javascript字符串操作

if (document.cookie.length > 0)
c_start = c_start + c_name.length + 1;
检查字符串是否为空

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
位置开始的字符,如果找不到此字符,则将其定位到字符串的末尾。

确定,快速回答。首先,
document.cookie
是一个字符串,包含此域上每个cookie集的
key=value

c_start = c_start + c_name.length + 1;
(1)
if(document.cookie.length>0)
检查是否设置了一些cookie,即字符串是否为空

c_start = document.cookie.indexOf(c_name + "=");
(2)
c_start=document.cookie.indexOf(c_name+“=”)
需要
=
来确保
c\u name
不会出现在cookie的值中,而只出现在键中

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

(4)
if(c_end==-1)c_end=document.cookie.length
如果cookie是最后一个cookie,则不会终止
,因此我们寻找字符串的最末端。

是一个字符串,
length
属性以字符形式保存字符串的长度

=
追加到cookie名称后,因为cookie名称也可能出现在
文档.cookie
字符串中的其他位置(如另一个cookie的cookie值中)。之所以使用
c_name.length+1
,是因为
+1
反映了cookie名称后的
=
。如果在草堆中找不到针,则返回
-1
;这就是为什么将
c_end
-1
进行比较的原因


但是您不应该使用这个实现。看看为什么它是错误的,以及更好的实现应该是什么样子。

这些问题中至少有一个已经在您的应用程序中得到了回答。不管怎样,为什么不自己检查一下代码呢?您可以插入
alert
console.log
,查看变量的内容以及使用
+1
与不使用
+1
之间的区别……希望有一个包含所有库和所有语言的所有引用的wiki。不是数千个HTML引用,而是数千个C引用,等等。:)如果您想要一个好的cookie脚本,并提供完整的解释,请参见:另请参见。修改您关于
c_start=document.cookie.indexOf(c_name+“=”)的回答请;-)