转 通过js获取cookie的实例及简单分析
今天review新人写的javascript代码的时候发现了很多的问题。这里以function getCookie(name){}为例。
其中比较典型的一个问题就是如何通过javascript获取cookie里面的一个值。 那么我们先来看看cookie到底长什么样子呢?
直接在浏览器地址栏输入: javascript:alert(document.cookie); 回车。(这行代码的意思是,让浏览器执行javascript语句: alert(document.cookie);)
结果是:uin=webryan; sessionid=10293123834; pgv_send=1; cur_page=index 这个样子。
注意:1.开始没有空格,2.分号后又空格 3.最后没有分号。那么我们获取cookie的方法就比较明确了。。
一种是用document.cookie.split(“; “)的方式把字符串分割成几个段,然后遍历整个数组。 把每个数组单元等号左边的和name对比是否相等,相等则取等号右边的值。
- function getCookie(name){
- var arr = document.cookie.split("; ");
- for(var i=0,len=arr.length;i<len;i++){
- var item = arr[i].split("=");
- if(item[0]==name){
- return item[1];
- }
- }
- return "";
- }
- function getCookie(name){
- var arr = document.cookie.split("; ");
- for(var i=0,len=arr.length;i<len;i++){
- var item = arr[i].split("=");
- if(item[0]==name){
- return item[1];
- }
- }
- return "";
- }
第二种就是直接在字符串中搜索关键字。由于分号有空格,加上防止出现搜索cookie name为“str”的value是,有一个test_str的cookie名称。这里我们先进行一次过滤。 然后在找到 ;str的位置,这样就不会出问题。具体情况如下
- function getCookie(name){
- var value="";
- var cookie = ";"+document.cookie.replace(/;\s+/g,";")+";"
- var pos = cookie.indexOf(";"+name+"=");
- if(pos>-1){
- var start = cookie.indexOf("=",pos);
- var end = cookie.indexOf(";",start);
- value = unescape(cookie.substring(start+1,end));
- }
- return value;
- }
- function getCookie(name){
- var value="";
- var cookie = ";"+document.cookie.replace(/;\s+/g,";")+";"
- var pos = cookie.indexOf(";"+name+"=");
- if(pos>-1){
- var start = cookie.indexOf("=",pos);
- var end = cookie.indexOf(";",start);
- value = unescape(cookie.substring(start+1,end));
- }
- return value;
- }
不同方法在不同时刻有不同的选择。 这个就是晓晓说的选型问题。
现在实际使用的代码是
- /**
- * cookie相关
- */
- $.cookie = {
- /**
- * 读取cookie
- *
- * @param {String} n=名称
- * @return {String} cookie值
- * @example
- * $.cookie.get('id_test');
- */
- get:function(n){
- var m = document.cookie.match(new RegExp( "(^| )"+n+"=([^;]*)(;|$)"));
- return !m ? "":unescape(m[2]);
- },
- /**
- * 设置cookie
- * @param {String} name cookie名称 --必填
- * @param {String} value cookie值 --必填
- * @param {String} domain 所在域名
- * @param {String} path 所在路径
- * @param {Number} hour 存活时间,单位:小时
- * @example
- * $.cookie.set('value1','cookieval',"id.qq.com","/test",24); //设置cookie
- */
- set:function(name,value,domain,path,hour){
- var expire = new Date();
- expire.setTime(expire.getTime() + (hour?3600000 * hour:30*24*60*60*1000));
- document.cookie = name + "=" + value + "; " + "expires=" + expire.toGMTString()+"; path="+ (path ? path :"/")+ "; " + (domain ? ("domain=" + domain + ";") : "");
- },
- /**
- * 删除指定cookie,复写为过期 !!注意path要严格匹配, /id 不同于/id/
- *
- * @param {String} name cookie名称
- * @param {String} domain 所在域
- * @param {String} path 所在路径
- * @example
- * $.cookie.del('id_test'); //删除cookie
- */
- del : function(name, domain, path) {
- document.cookie = name + "=; expires=Mon, 26 Jul 1997 05:00:00 GMT; path="+ (path ? path :"/")+ "; " + (domain ? ("domain=" + domain + ";") : "");
- },
- /**
- * 删除所有cookie -- 这里暂时不包括目录下的cookie
- * @example
- * $.cookie.clear(); //删除所有cookie
- */
- clear:function(){
- var rs = document.cookie.match(new RegExp("([^ ;][^;]*)(?=(=[^;]*)(;|$))", "gi"));
- // 删除所有cookie
- for (var i in rs){
- document.cookie = rs[i] + "=;expires=Mon, 26 Jul 1997 05:00:00 GMT; path=/; " ;
- }
- },
- /**
- * uin -- 针对业务,对外开源请删除
- *
- * @return {String} uin值
- * @example
- * $.cookie.uin();
- */
- uin:function(){
- var u = $.cookie.get("uin");
- return !u?null:parseInt(u.substring(1, u.length),10);
- }
- };
转 通过js获取cookie的实例及简单分析的更多相关文章
- 通过js获取cookie的实例及简单分析
今天碰到一个在firefox下swfupload 上传时session不一致问题 在一个项目遇到多文件上传时,firefox下,服务器端的session获取不一致问题. 解决办法: 解决办法:将ses ...
- 简单利用XSS获取Cookie信息实例演示
简单利用XSS获取Cookie信息实例演示 首先要找到一个有XXS的站,这里就不整什么大站了,谷歌一下inurl:'Product.asp?BigClassName',搜出来的命中率也比较高.随便 ...
- js获取cookie
js获取cookie 之前用jQuery.cookie来获取cookie,虽然简单,但是项目上又多引用了一个插件,总觉得不太好,下面是我封装的js原生获取cookie的函数. function get ...
- node.js获取cookie
node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').fo ...
- js获取cookie数据并发送给服务端
js获取cookie数据并发送给服务端 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- js获取cookie中存储的值
最近看了试卷题目发现自己会的十分的匮乏, 第一题就把自己难住了,知道有这个东西,但是实际上没有操作过. ========================================= cookie ...
- js获取cookie提取用户名asp.net+html
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一 ...
- js封装Cookie操作 js 获取cookie js 设置cookie js 删除cookie
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code var CookieUtil = { // 设置cookie set : functi ...
- 用js获取cookie
//获取cookiefunction cookie_email(cookie_name){ var cookiestr = document.cookie; if (cookiestr.length ...
随机推荐
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
- [Oracle] SQL*Loader 详细使用教程(2)- 命令行参数
sqlldr工具 SQL*Loader的客户端工具是sqlldr,在操作系统的命令行下输入sqlldr,后面不接任何参数,将显示帮助信息如下所示(所有命令行参数的简单描述及其默认值),所以你并不需 ...
- PHP保留两位小数的几种方法
$num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_ ...
- 【ros】rplidar Hector Slam
想用rplidar跑一下hector slam,在网上发现了几个教程写的都不错,但是亲测发现都有点不足,综合了一下,进行补充. 1. 安装ros 和 创建工作空间 http://blog.csdn.n ...
- 一个php soap的错误记录
今天使用php soap实现两个系统之间的互通 在写好php的soapserver后,client端调用一直报 looks like we got no XML document,尝试好久后无法解决 ...
- Java 类中各成分加载顺序 和 内存中的存放位置
参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new ...
- CSS权重及样式优先级问题
CSS权重值计算 一条样式规则的整体权重值包含四个独立的部分:[A, B, C, D]; (1) A 表示内联样式(写在标签的style属性中),只有 1 或者 0 两个值:对于内联样式,由于没有选择 ...
- 分治法求2n个数的中位数
问题:设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数.试设计一个O(logn)时间的分治算法,找出X和Y的2n个数的中位数 思想: 对于数组X[0:n-1]和Y[0:n ...
- Eclipse 常用用法
搞了很多年的.NET, 最近开始搞Eclipse. 刚开始使用 Eclipse, 发现 Eclipser 远没有Visual Stuido 强大. 所以先把Eclipse常用的用法总结 ...
- 介绍开源的.net通信框架NetworkComms框架之一 首字节验证
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 目前作者已经开源 开源地 ...