JS存取Cookies值,附自己写的获取cookies的一个方法

参考:脚本之家

这里对cookie进行了说明,也介绍了几个方法,但是我要取我存的cookie时取不到,他的方法只是针对存的  名字-值,不涉及键,所以自己写了个方法,来满足我的需求。

①你首先的了解Cookie的两种存法   查看  这篇文章下面的一点的位子有介绍

js存cookie:

   //存cookie
   document.cookie = "xxx=456"; //不带子键
   document.cookie = "haha=hello=123&word=456"; //带子键

这个太简单了。

我们获取Cookie

var cookies = document.cookie.split(";");
$.each(cookies, function (i, item) {
console.log(item);
})

很明显,最后两行是账号和密码的cookie值。是不是不好处理。为了做测试,然后我又加了两个cookie

    HttpCookie hcName = new HttpCookie("testName");
            hcName.Value = "测试名字";
            hcName.Expires = DateTime.Now.AddDays(10);
            Response.Cookies.Add(hcName);

            HttpCookie hcPwd = new HttpCookie("testPwd");
            hcPwd["sonKey"] = "测试密码";
            // hcPwd.Values["sonKey"] = 测试密码;   上下两种都可以
            hcPwd.Expires = DateTime.Now.AddDays(10);
            Response.Cookies.Add(hcPwd);

那么,我们现在网页中存在的cookie的类型有:  名称=值,名称=键=值,名称=键=值&键1=值1&键2=键3,基本情况都包含了。然后自己写了一个方法,可能比较繁琐,用的时候调用方法传递参数就可以了,返回的就是 值。

             /*  参数说明
                  ...rest表示可空参数
                  第一个参数是存的cookie名称
                  第二个参数是第一个参数名称下的子键
                  有子键就写,没有就不写
            */
            function getCookie(name, ...rest) {
                var dd;
                var cookies = document.cookie.split(";");    //cookie的类型有很多,你要确定你需要获取什么
                $.each(cookies, function (i, item) {
                    item = item.trim();//先把空格去了
                    if (item.indexOf(name) > -1) {
                        //你先的理解cookie这个位子才好理解   cookie可以有子键,也可以没有子键
                        //①格式: 名字=值
                        if (rest.length === 0) {
                            var names = item.split("=")
                            //console.log(`名字;${names[0]},值:${names[1]}`);
                            dd = names[1];
                        }
                        else {
                            //②格式:名字=子键=值&子键1=值1&子键2=值2
                            //这种的麻烦在于它的子键可以有很多
                            var arry = item.split("&");     //取到所有的子键和值,注意:此集合的第一项,多了个名字
                            if (arry.length > 1) {
                                $.each(arry, function (a, b) {
                                    if (b.indexOf(rest[0]) > -1) {
                                        var names = b.split("=");
                                        if (names[0] == name) {    //判断是否带cookie的名字
                                           // console.log(`名字:${name},子键:${names[1]},值:${names[2]}`);
                                            dd = names[2];
                                        } else {
                                            console.log(`名字:${name},子键:${names[0]},值:${names[1]}`);
                                            dd = names[1];
                                        }
                                    }
                                });
                            } else {
                                var arry1 = arry[0].split("=");
                                console.log(`名字:${name},子键:${arry1[1]},值:${arry1[2]}`);
                                dd = arry1[2];
                            }
                        }
                    }
                });
                return dd;
            };

我们做测试:

  $(function () {
              var a=getCookie("testName");
              var b = getCookie("testPwd", "sonKey");
              var c = getCookie("UserName", "WarehouseManagement");
              var d = getCookie("UserPwd", "WarehousePhoneWeb");
              var e = getCookie("UserName", "WarehousePhoneWeb");
              var f = getCookie("testName11");//没有就返回空
              alert(`a:${a},b:${b},c;${c},d:${d},e:${e},f:${f}`);
            });

数据都可以取到。

时间: 2024-10-10 22:56:05

JS存取Cookies值,附自己写的获取cookies的一个方法的相关文章

表单提交textarea内容,第一次获取不到值,第二次才能获取到的解决方法:

因为KindEditor的可视化操作在新创建的iframe上执行,代码模式下的textarea框也是新创建的,所以最后提交前需要执行 sync() 将HTML数据设置到原来的textarea. KindEditor在默认情况下自动寻找textarea所属的form元素,找到form后onsubmit事件里添加editor.sync()函数,所以用form方式提交数据,不需要手动执行editor.sync()函数. 在提交表单的onsubmit()函数里加入 window.content.sync

js 获取地址栏最后一个文件名称

var JsRequest={ //这就是一个静态类,类里面有2个静态方法 //方法一:获取url的文件名 例如 index.html getUrlname:function(url){ //假如传进来的url是 http://www.qq.com/index.html?name=joey 这里一共是有3个斜杠,如果我们想获取index.html url=url.split('?')[0] ;// 我们只要?号前的 var urlSlashCount=url.split('/').length;

WebView使用详解(一)——Native与JS相互调用(附JadX反编译)

前言:念念不忘,必有回响,永远坚持你所坚持的! 一直在用WebView,还没有系统的总结过它的用法,下面就系统的总结下,分享给大家 一.基本用法 1.加载在线URL void loadUrl(String url) 这个函数主要加载url所对应的网页地址,或者用于调用网页中的指定的JS方法(调用js方法的用法,后面会讲),但有一点必须注意的是:loadUrl()必须在主线程中执行!!!否则就会报错!!!.注意:加载在线网页地址是会用到联网permission权限的,所以需要在AndroidMan

基于JQuery实现表单元素值的回写

form.jsp: <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html &

Data层相关问题 &amp; JS循环取值

第一次写博客,里面是自己工作中碰到的问题及总结的知识点,便于自己以后回顾,技术大牛们请直接忽略这篇文章,也希望能帮助到想我这样的小白! Data层相关问题总结: 1. 代码管理用的是 VSS 2005: 改好程序后,必须要重新生成下:(注意文件之间的引用关系的顺序),程序改的是对的,也在本地保存了,断点调试的时候还是之前没有改的代码,郁闷了好久.别的引用没有更新,害惨我了. 第一次碰到,不了解,白白浪费了两天的时间,两天的时间,还破坏了我周末的心情! 2. SQL语句写好后,注意起中英文之间的输

得于吾师傅的js知识 js类,单写模板,和私有保护的方法

js的类的写法: 1,写法一:function内部包含this.function()如代码: var origin_class = function(name) { var lover = ''; this.getLover = function(hername) { return this.lover = hername; } this.show = function(hername) { return this.getLover(hername)+'love'+name; } } var t

selenium处理富文本框,日历控件等 调用JS修改value值

http://blog.csdn.net/fudax/article/details/8089404 document.getElementById("js_domestic_fromdate").value = "2014-10-10" selenium处理富文本框,日历控件等 调用JS修改value值,布布扣,bubuko.com

今天和组内一起写代码时碰到了一个关于命名冲突的问题,最后用js命名空间的方法解决的。

//第一步,首先创建一个全局变量,可以放在自己的js方法库中方便以后用,这个就是用来注册命名空间的方法. ns = function(namespace){ var arr = namespace.split('.');  //将传入的字符串如"com.test.lzn"以'.'隔开做成一个数组 var strNamespace = ""; //这个是为了保存每一步循环进去的包名 for(var i=0;i<arr.length;i++) { if(i!=0)

html与js的取值,赋值

----------------------------------------------------------------------------------------------------------- html中赋值:<button ng-click="showColor('green')">变色</button> js中取值: $scope.showColor=function($routeParams){ alert($routeParams)