(转)document.cookie.indexof的解释
代码:
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的解释的更多相关文章
- JavaScript中的document.cookie的使用
转:http://blog.csdn.net/liuyong0818/article/details/4807473 我们已经知道,在 document 对象中有一个 cookie 属性.但是 Coo ...
- cookie的详细解释
突然看到网页上中英文切换的效果,不明白怎么弄得查了查 查到了cookie 并且附有详细解释 就copy留作 以后温习 http://blog.csdn.net/xidor/article/detail ...
- 【转】document.cookie详解
设置cookie 每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie: document.cookie="userId=828"; 如果 ...
- 妙味5:document.cookie 操作
本地环境中测试需要用fireFox,其它几个浏览器不行,服务器都可以测出正确结果 cookie特点: 1. 如登陆信息存储,同一论坛打开多个页面不用重复登陆,就是通过cookie来存取实现: 2. ...
- document.cookie打不出来cookies
比如session这种设置,都是设置了HttpOnly 导致document.cookie看不到,这和xss 跨站脚本攻击(Cross Site Scripting)
- document.cookie的使用
设置cookie每个cookie都是一个名/值对,可以把下面这样一个字符串赋值给document.cookie:document.cookie="userId=828";如果要一次 ...
- document cookie用法
cookie概述 曾经利用一个不变的框架来存储购物栏数据,而商品显示页面是不断变化的,尽管这样能达到一个模拟 全局变量的功能,但并不严谨.例如在导航框架页面内右击,单击快捷菜单中的[刷新]命令,则所有 ...
- JavaScript中document.cookie
“某些 Web 站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为 Cookie.”—— MSIE 帮助.一般来说,Cookies 是 CGI 或类似,比 HTML 高级的文件.程序等创建 ...
- document.cookie
概念相关: cookie是存于用户硬盘上的一个文件,对应一个域名,当浏览器再次访问这个域名时,便使用这个cookie. cookie 可以跨越一个域名下的多个网页,但不能跨越多个域名使用. cooki ...
随机推荐
- Application 可以存储全局变量
Application.Lock(); Application["Name"]="小亮" Application.UnLock(); Response.Writ ...
- Linux虚机centos6.5安装Vmware Tools步骤
退出到windows,在虚拟机菜单栏中点击 虚拟机-> 安装 VMWARE TOOLS 子菜单 进入到Linux系统,选择系统工具-终端 命令 su root 或者 su 以root进入 挂在 ...
- iOS RGB颜色封装
使用类别创建 .h文件 #import <UIKit/UIKit.h> @interface UIColor (HexColor) + (UIColor *)colorWithHex:(N ...
- 快速搭建Android 开发环境-使用ADT Bundle
一.搭建Android开发环境 近日要学Android开发基础,就着手搭建Windows下的Android开发环境. 找了一些相关的博文参考,基本上都是要分别下载和安装JDK, Eclipse, An ...
- 慕课linux学习笔记(七)常用命令(4)
帮助命令 Man命令 Man的级别 命令帮助 可被内核调用的函数帮助 函数和函数库帮助 特殊文件帮助 /dev 配置文件帮助 游戏的帮助 其他杂项的帮助 管理员可用命令帮助 内核相关文件的帮助 -f ...
- 【0】Laravel 5.1 简介
1.简介 Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以 ...
- excel筛选两列值是否相同,如果相同返回第三列值
见图:
- WPF 如何缓解大量控件加载缓慢的问题
最近有一个项目需要加载大量的控件,导致系统出现卡顿问题,经过几天的努力,终于搞定了,写一下备忘. 解决方案是首次加载时只显示可见区域控件,之后使用辅助线程进行分批加载,将分批加载的线程优先级别设置为空 ...
- java classpath import package 机制 @Java的ClassPath, Package和Jar
java classpath import package 机制 從一個簡單的例子談談package與import機制 基本原則:為什麼需要將Java文件和類文件切實安置到其所歸屬之Package ...
- codility上的问题 (22)
问题描述: 用1 * 1, 1 * 2的矩形覆盖一个n行m列的矩形,问有多少种方法. 数据范围 : n [1..10^6], m [ 1..7] 要求复杂度: 时间 O(log(n) * 8 ^m ...