zoukankan      html  css  js  c++  java
  • JS存储cookie读取cookie删除cookie详细用法

    假设有这样一种情况,在某个用例流程中,由A页面跳至B页面,若在A页面中采用JS用变量temp保存了某一变量的值,在B页面的时候,同样需要使用JS来引用temp的变量值,对于JS中的全局变量或者静态变量的生命周期是有限的,当发生页面跳转或者页面关闭的时候,这些变量的值会重新载入,即没有达到保存的效果。解决这个问题的最好的方案是采用cookie来保存该变量的值。

    cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔。

    JS设置cookie:

    简单方式:document.cookie="name="+username;

    封装方法:

    //写cookies,一个小时过期  
        function setCookie(name, value) {  
            var exp = new Date();  
            exp.setTime(exp.getTime() + 60 * 60 * 1000);  
            document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString() + ";path=/";  
        } 
    

      注意:

    1. path=/,path参数用来设置cookie路径,同一路径下不能存储相同名字的两个cookie,当存第二个的时候会把第一个覆盖其实相当于对第一个进行了赋值操作;  
    2. 不同路径下可以存储相同名字的cookie。读取时如果在多个路径下存在多个cookie,则会读取页面所对应的路径(不是物理路径,是cookie的路径)下的cookie,不注意这点  
    3. 可能会造成读取的cookie值不正确。删除时只能删除对应路径下的cookie,不指定路径,默认删除的是页面所对应的路径下的cookie。

         读取cookies

       

    //读取cookies  
        function getCookie(name) {  
            var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");  
      
            if (arr = document.cookie.match(reg))  
      
                return unescape(arr[2]);  
            else  
                return null;  
        } 
    

      删除cookies  

    //删除cookies  
        function delCookie(name) {  
            var exp = new Date();  
            exp.setTime(exp.getTime() - 60 * 60 * 1000);  
            var cval = getCookie(name);  
            if (cval != null)  
                document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString() + ";path=/";  
        }
    删除时只能删除对应路径下的cookie,不指定路径,默认删除的是页面所对应的路径下的cookie。 

      

    1. //如果需要设定自定义过期时间  
    2. //那么把上面的setCookie 函数换成下面两个函数就ok;  
    3. //程序代码 
    [css] view plain copy
    function setCookie(name,value,time)  
    {  
    var strsec = getsec(time);  
    var exp = new Date();  
    exp.setTime(exp.getTime() + strsec*1);  
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();  
    }  
    function getsec(str)  
    {  
    alert(str);  
    var str1=str.substring(1,str.length)*1;  
    var str2=str.substring(0,1);  
    if (str2=="s")  
    {  
    return str1*1000;  
    }  
    else if (str2=="h")  
    {  
    return str1*60*60*1000;  
    }  
    else if (str2=="d")  
    {  
    return str1*24*60*60*1000;  
    }  
    } 
    

      //这是有设定过期时间的使用示例://s20是代表20秒//h是指小时,如12小时则是:h12//d是天数,30天则:d30setCookie("name","hayden","s20"); 

    1. path=/,path参数用来设置cookie路径,同一路径下不能存储相同名字的两个cookie,当存第二个的时候会把第一个覆盖其实相当于对第一个进行了赋值操作;  
    2. 不同路径下可以存储相同名字的cookie。读取时如果在多个路径下存在多个cookie,则会读取页面所对应的路径(不是物理路径,是cookie的路径)下的cookie,不注意这点  
    3. 可能会造成读取的cookie值不正确。删除时只能删除对应路径下的cookie,不指定路径,默认删除的是页面所对应的路径下的cookie。
  • 相关阅读:
    Java-GZIPOutputStream踩坑
    Redis事务
    Netty实现简单群聊
    SpringMVC请求参数解析
    Netty实现WebSocket
    SpringBoot项目war包部署
    NIO实现群聊
    SpringMVC请求映射handler源码解读
    SpringMVC自定义兼容性HandlerMapping
    spring boot自定义类配置绑定在配置文件中自动提示
  • 原文地址:https://www.cnblogs.com/DSC1991/p/9232325.html
Copyright © 2011-2022 走看看