代码:
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. Ubuntu 12.04.5 LTS 上安装hadoop 2.6.0后运行自带的例程wordcount

    注:我所有的操作均通过Xshell 5远程连接Ubuntu进行实施 第一步:启动hadoop,利用jps查看hadoop是否已经启动,如果没有启动用start-dfs.sh脚本启动(hadoop2.X ...

  2. gitweb随记

    1.安装gitweb,命令安装即可 apt-get install gitweb 2.clone cgi $ git clone git://git.kernel.org/pub/scm/git/gi ...

  3. hdu 2199

    Problem Description Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its sol ...

  4. CODEVS 1066/洛谷 P1514引水入城

    1066 引水入城 2010年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 在一个遥远的国 ...

  5. js中的console

    console.log 是我们在调试代码的时候经常用到的一个方法,也可能也是很多人用的关于console的唯一方法,其实console对象下有很多不错的方法,现在记录总结于此.   log.info. ...

  6. 利用Azure Redis Cache构建百万量级缓存读写

    Redis是一个非常流行的基于内存的,低延迟,高吞吐量的key/value数据存储,被广泛用于数据库缓存,session的管理,热数据高速访问,甚至作为数据库方式提高应用程序可扩展性,吞吐量,和实施处 ...

  7. win7 下的open live writer代码插件

    open live writer 是博客园官方推荐的编辑器.恰好被它的各种便利吸引住了,于是花点时间研究一下,结果又用了好长时间,因为代码插件一时安装不了.在这里推荐小伙伴们可以先去看看这篇博文:ht ...

  8. 【iOS开发】添加子控件方式(懒加载,GCC)

    // // ViewController.m // GCC // // Created by admin on 15/10/7. // Copyright © 2015年 admin. All rig ...

  9. Effective Java2读书笔记-类和接口(四)

    第19条:接口只用于定义类型 这一条就举了一个反例,说有些接口中只包含常量.这是对接口的不良使用.要实现相同的功能,应该使用不可实例化的工具类(第4条说过). public class Physica ...

  10. SSH自动部署

    我的是windows环境,目前开发的过程中,有些项目需要一下子部署到很多的linux服务器上.写了个脚本能够自动上传文件和执行部署任务.完成这个任务需要的条件包括SSH配置和一个执行脚本. 准备 1. ...