JS创建和存储 cookie的一些方法

JS创建和存储 cookie的一些方法

在js中cookie的操作与存储及清除cookie都与时间有关,我们只要把cookie过期时间进行有效的设置我们就可以控制它的存储了,下面我来给大家总结一下js中cookie的一些使用技巧

创建和存储 cookie

在这个例子中我们要创建一个存储访问者名字的 cookie。当访问者首次访问网站时,他们会被要求填写姓名。名字会存储于 cookie 中。当访问者再次访问网站时,他们就会收到欢迎词。

首先,我们会创建一个可在 cookie 变量中存储访问者姓名的函数:

 代码如下 复制代码

function Setcookie (name, value)

    //设置名称为name,值为value的Cookie
    var expdate = new Date();   //初始化时间
    expdate.setTime(expdate.getTime() + 30 * 60 * 1000);   //时间
    document.cookie = name+”=”+value+”;expires=”+expdate.toGMTString()+”;path=/”;

   //即document.cookie= name+”=”+value+”;path=/”;   时间可以不要,但路径(path)必须要填写,因为JS的默认路径是当前页,如果不填,此cookie只在当前页面生效!~
}

上面这个函数中的参数存有 cookie 的名称、值以及过期天数。

在上面的函数中,我们首先将天数转换为有效的日期,然后,我们将 cookie 名称、值及其过期日期存入 document.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 unescape(document.cookie.substring(c_start,c_end))
    } 
  }
return “”
}

上面的函数首先会检查 document.cookie 对象中是否存有 cookie。假如 document.cookie 对象存有某些 cookie,那么会继续检查我们指定的 cookie 是否已储存。如果找到了我们要的 cookie,就返回值,否则返回空字符串。

最后,我们要创建一个函数,这个函数的作用是:如果 cookie 已设置,则显示欢迎词,否则显示提示框来要求用户输入名字。

 代码如下 复制代码

function checkCookie()
{

username=getCookie(‘username’)
if (username!=null && username!=””)
  {alert(‘Welcome again ‘+username+’!’)}
else 
  {

  username=prompt(‘Please enter your name:’,””)
  if (username!=null && username!=””)
    {

    setCookie(‘username’,username,365)
    }
  }
}

     

一个完整实例

 

 代码如下 复制代码

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>无标题文档</title>
<script type=”text/javascript”>
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 unescape(document.cookie.substring(c_start,c_end))
}
}
return “”
}

function setCookie(c_name,value,expiredays)
{

var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ “=” +escape(value)+
((expiredays==null) ? “” : “;expires=”+exdate.toGMTString())
}

function checkCookie()
{

username=getCookie(‘username’)
if (username!=null && username!=””)
{alert(‘Welcome again ‘+username+’!’)}
else
{

username=prompt(‘Please enter your name:’,””)
if (username!=null && username!=””)
{

setCookie(‘username’,username,365)
}
}
}
</script>
</head>
<body onLoad=”checkCookie()”>

</body>
</html>

上面讲到了cookie的创建我们现在来看一个利用cookie保存浏览记录实例

浏览记录的显示是从cookie里读出来,然后解析成json,生成html元素。因为用户可能会同时打开好几个页面,这几个页面上可能都有浏览记录,为了使即使显示浏览记录,每秒中刷新一次。
要用到2个js文件,history.js,关键的聊天记录保存和读取代码。json.js,对json进行处理。

history.js

 代码如下 复制代码

var addHistory=function(num,id){

    stringCookie=getCookie(‘history’);
    var stringHistory=””!=stringCookie?stringCookie:”{history:[]}”;
    var json=new JSON(stringHistory);
    var e=”{num:”+num+”,id:”+id+”}”;
    json[‘history’].push(e);//添加一个新的记录
    setCookie(‘history’,json.toString(),30);
}
//显示历史记录
var DisplayHistory=function(){

    var p_ele=document.getElementById(‘history’);
     while (p_ele.firstChild) {

      p_ele.removeChild(p_ele.firstChild);
     }

    var historyJSON=getCookie(‘history’);
    var json=new JSON(historyJSON);
    var displayNum=6;
    for(i=json[‘history’].length-1;i>0;i–){

        addLi(json[‘history’][i][‘num’],json[‘history’][i][‘id’],”history”);
        displayNum–;
        if(displayNum==0){break;}
    }
}
//添加一个li元素
var addLi=function(num,id,pid){

    var a=document.createElement(‘a’);
    var href=’product.action?pid=’+id;
    a.setAttribute(‘href’,href);
    var t=document.createTextNode(num);
    a.appendChild(t);
    var li=document.createElement(‘li’);
    li.appendChild(a);
    document.getElementById(pid).appendChild(li);
}
//添加cookie
var setCookie=function(c_name,value,expiredays)
{

    var exdate=new Date()
    exdate.setDate(exdate.getDate()+expiredays)
    cookieVal=c_name+ “=” +escape(value)+((expiredays==null) ? “” : “;expires=”+exdate.toGMTString());
//    alert(cookieVal);
    document.cookie=cookieVal;
}
//获取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
//        document.write(document.cookie.substring(c_start,c_end)+”<br>”);
        return unescape(document.cookie.substring(c_start,c_end))
        } 
      }
    return “”
}

json文件

 代码如下 复制代码

json.js 
var JSON = function(sJSON){

    this.objType = (typeof sJSON);
    this.self = [];
    (function(s,o){for(var i in o){o.hasOwnProperty(i)&&(s[i]=o[i],s.self[i]=o[i])};})(this,(this.objType==’string’)?eval(‘0,’+sJSON):sJSON);
}
JSON.prototype = {

    toString:function(){

        return this.getString();
    },
    valueOf:function(){

        return this.getString();
    },
    getString:function(){

        var sA = [];
        (function(o){

            var oo = null;
            sA.push(‘{‘);
            for(var i in o){

                if(o.hasOwnProperty(i) && i!=’prototype’){

                    oo = o[i];
                    if(oo instanceof Array){

                        sA.push(i+’:[‘);
                        for(var b in oo){

                            if(oo.hasOwnProperty(b) && b!=’prototype’){

                                sA.push(oo[b]+’,’);
                                if(typeof oo[b]==’object’) arguments.callee(oo[b]);
                            }
                        }
                        sA.push(‘],’);
                        continue;
                    }else{

                        sA.push(i+’:’+oo+’,’);
                    }
                    if(typeof oo==’object’) arguments.callee(oo);
                }
            }
            sA.push(‘},’);
        })(this.self);
        return sA.slice(0).join(”).replace(/[object object],/ig,”).replace(/,}/g,’}’).replace(/,]/g,’]’).slice(0,-1);
    },
    push:function(sName,sValue){

        this.self[sName] = sValue;
        this[sName] = sValue;
    }
}

html文档

 代码如下 复制代码

示例程序 
<script type=”text/javascript” src=”../js/json.js”></script>
<script type=”text/javascript” src=”../js/history.js”></script>
<ul id=”history”>
</ul>
<script> 
addHistory(15810782304,2);
addHistory(64654665,2);
addHistory(6843212,2);
addHistory(84984432521,2);
setInterval(“DisplayHistory()”,1000);
</script>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112742.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jQuery官网下载步骤[通俗易懂]

    jQuery官网下载步骤[通俗易懂][转载出处](https://blog.csdn.net/u011870547/article/details/50033113)[原文作者](https://blog.csdn.net/u011870547)①.百度jQuery,进入官网②.进入官网后,点击下载③.之后进入下载页面,会看到有各种版本,解压版和未…

    2022年6月3日
    40
  • 瀑布模型和快速原型模型的共同点_增量模型和瀑布模型的区别

    瀑布模型和快速原型模型的共同点_增量模型和瀑布模型的区别软件开发过程模型在软件开发的几十年实践中,人们总结了很多软件开发模型用来描述和表示一个复杂的开发过程,如:软件测试与软件的开发模式有着紧密的联系,作为一名测试人员,应该充分理解软件的开发模式,以便

    2022年8月4日
    3
  • Objective-C语法之代码块(block)的使用

    Objective-C语法之代码块(block)的使用

    2021年11月16日
    36
  • bzero和memset哪个更耗时_malloc_trim

    bzero和memset哪个更耗时_malloc_trim 关于字符数组的初始化,在项目的压力测试中,发现性能明显下降,变怀疑在程序中的若干临时字符数组的初始化(使用bzero)身上。于是修改为首个字符置零的方式而非全部置零的方式初始化,响应得到明显的提升。原来在mp3检索的每一条结果都要进行bzero对临时数组初始化,每一个请求需要30次的bzero对临时数组的置零。于是想到了,在非必要的情况下,只对临时数组的第一个(或前几个)字符置零的初始化

    2022年10月10日
    0
  • 亿图图示用户名和密钥激活码【最新永久激活】2022.02.13

    (亿图图示用户名和密钥激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年4月1日
    20.2K
  • mysql mariadb 安装_mysql兼mariadb安装过程详解

    mysql mariadb 安装_mysql兼mariadb安装过程详解mysql兼mariadb下载自己找自己对应的版本:https://dev.mysql.com/downloads/mysql/因为5.5以后都用cmake编译了,所以系统里没有的话,就下个源码的装一下,怎么测试系统里有没有装了,在命令行中输入#cma在按Tab看有没有cmake有的话系统就装过了,就不用在装了。没有话就去下个吧,下载地址:https://cmake.org/downloa…

    2022年6月5日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号