代码:
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 usescape(document.cookie.substring(c_start, c_end));

}

}
 
}

解释:

1、cookie保存在系统中的时候是“cookie名1 = cookie值; cookie名2 = cookie值”这样的方式来保存的。

2、document.cookie是返回包含所有cookie的字符串。

3、document.cookie.index(c_name + "=")是取得这个cookie名在整个cookie中的位置。(加“=”号:取cookie名加上等于号的位置,比方整个cookie是"user=tony; passwd=user123",这时候查找名为user的cookie值的时候,是查找"user="的位置;如果不要等于号,就会找到其它位置的"user",比如后面密码里面也有user字符,但并不是cookie中cookie名都是唯一的,所以加上等于号就不会出错。 )

4、c_start = c_start + c_name.length + 1是用先前取得的位置加上cookie名的长度再加1,就是把位置确定在这个cookie名的“=”符号的后面。

5、c_end = document.cookie.indexof(";", c_start)是从上一步的位置开始查找的,直到";"的位置。

6、document.cookie.substring(c_start, c_end)就是取该cookie名的等号后面到分号前面的字符串,即对应的cookie的值。

====================

更好的读取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 (document.cookie.substring(c_start,c_end));

}

}

return "";

}

上面这段代码是用来读取cookie的,但它存在一个问题,比如当cookie中同时存在这样两个字段“kuin=12345”和"uin=67890"时,如果

kuin在cookie中位于uin的前面,那么上面这段代码就无法读取uin的值了,因为它会误把kuin当作uin来读取。

那么如何修复呢,下面是优化后的代码:

function getCookie(c_name)

{

if (document.cookie.length>0)

{

var tmp_cookie = document.cookie,

tmp_c1 = (tmp_cookie.indexOf(" "+c_name+"=")>0) ? (tmp_cookie.indexOf(" "+c_name+"=")+1) : 0,

tmp_c2 = (tmp_cookie.indexOf(";"+c_name+"=")>0) ? (tmp_cookie.indexOf(";"+c_name+"=")+1) : 0,

tmp_c3 = (tmp_cookie.indexOf(c_name+"=")==0) ? 0 : -1,

c_start=tmp_c1 || tmp_c2 || tmp_c3;

if (c_start!=-1)

{

c_start=c_start + c_name.length+1;

var c_end=tmp_cookie.indexOf(";",c_start);

if (c_end==-1) c_end=tmp_cookie.length;

return (tmp_cookie.substring(c_start,c_end));

}

}

return "";

}

补充:如果cookie中存在大量的值,我们就没有必要不断的使用getCookie()去读取了,更高效的方法是在第一次读取时直接将所有cookie解

析出来并存放在一个对象中,如下:

cookie = {

uin: 12345,

kuin: 59432,

nick: flondon

};

(转)document.cookie.indexof的解释的更多相关文章

  1. JavaScript中的document.cookie的使用

    转:http://blog.csdn.net/liuyong0818/article/details/4807473 我们已经知道,在 document 对象中有一个 cookie 属性.但是 Coo ...

  2. cookie的详细解释

    突然看到网页上中英文切换的效果,不明白怎么弄得查了查 查到了cookie 并且附有详细解释 就copy留作 以后温习 http://blog.csdn.net/xidor/article/detail ...

  3. 【转】document.cookie详解

    设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="userId=828"; 如果 ...

  4. 妙味5:document.cookie 操作

    本地环境中测试需要用fireFox,其它几个浏览器不行,服务器都可以测出正确结果   cookie特点: 1. 如登陆信息存储,同一论坛打开多个页面不用重复登陆,就是通过cookie来存取实现: 2. ...

  5. document.cookie打不出来cookies

    比如session这种设置,都是设置了HttpOnly 导致document.cookie看不到,这和xss  跨站脚本攻击(Cross Site Scripting)

  6. document.cookie的使用

    设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie="userId=828";如果要一次 ...

  7. document cookie用法

    cookie概述 曾经利用一个不变的框架来存储购物栏数据,而商品显示页面是不断变化的,尽管这样能达到一个模拟 全局变量的功能,但并不严谨.例如在导航框架页面内右击,单击快捷菜单中的[刷新]命令,则所有 ...

  8. JavaScript中document.cookie

    “某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie.”—— MSIE 帮助.一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件.程序等创建 ...

  9. document.cookie

    概念相关: cookie是存于用户硬盘上的一个文件,对应一个域名,当浏览器再次访问这个域名时,便使用这个cookie. cookie 可以跨越一个域名下的多个网页,但不能跨越多个域名使用. cooki ...

随机推荐

  1. .net后台 Silverlight 页面 动态设置 ASPX 页面 控件的Margin值(位置设置)

    silverlight后台代码:using System.Windows.Browser;public Page1(){HtmlPage.RegisterScriptableObject(" ...

  2. VC 串口通信类

    为了节省时间,我就贴出来吧 头文件 SerialPort.h /******************************************************************** ...

  3. ORA-01722: invalid number,ORA-12801

    SQL: SELECT /*+ parallel(a,32) */ a.id ,a.data_date ,a.mobile_num ,a.mobile_code ,b.prov AS mobile_p ...

  4. 系统报错 hppatusg01

    下载DLL 放在C:\Windows\SysWOW64(64位系统)或C:\Windows\System32(32位系统) 下载地址 https://yunpan.cn/cBB4Q6czDKyqt   ...

  5. [转]Hibernate映射的基本操作

       ++YONG原创,转载请注明http://blog.csdn.net/qjyong/article/details/1829672          Hibernate映射主要是通过对象关系映射 ...

  6. pubwin 客户端会员无法自助结账的排查方法

    客户端会员无法自助结账按以下方法排查:1,看客户端能不能打开web https 后台,打不开的话,在服务端打上2048证书补丁(按下面帖子操作)http://bbs.pubwin.com.cn/for ...

  7. IOS 保存图片至相册

    IOS 保存图片至相册   应用中有时我们会有保存图片的需求,如利用UIImagePickerController用IOS设备内置的相机拍照,或是有时我们在应用程序中利用UIKit的 UIGraphi ...

  8. 开心菜鸟系列学习笔记------javascript(5)

    一.this的关系    1)全局代码中的this    2)函数代码中的this在函数代码中使用this时很有趣,这种情况很难且会导致很多问题. 这种类型的代码中,this值的首要特点(或许是最主要 ...

  9. MVC之实体框架(数据持久化框架)EntityFrameWork(EF)

    EF - EntityFrameWork 中文名:实体框架(数据持久化框架) 1.使用EF查询(Linq to EF) 1.1使用标准查询运算符来查询 OumindBlogEntities db = ...

  10. BIT_COUNT()和BIT_OR()

    在学习MySQL手册时,看到根据天数计算访问量时,出现了BIT_COUNT()和BIT_OR()两个函数来处理天数计算的问题 所使用的表格信息如下: mysql> select year,mon ...