zoukankan      html  css  js  c++  java
  • 用js操作cookie保存浏览记录

    说明:最近做了一个功能,记录用户浏览过的产品页面。我的思路是,客户每次进入产品页面,就自己调用JS把产品信息以json的形式保存到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.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;
    }
    }
    示例程序
    <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>
  • 相关阅读:
    C 语言中的 fgets()
    C++ 中的 C_str() 函数用法
    Ubuntu 下使用 sshfs 挂载远程目录到本地
    VirtualBox 下主机与虚拟机以及虚拟机之间互通信配置
    转:sudo 的常见用法和参数选项
    “a++” 与 “++a” 的区别
    Linux 下运行 C++ 程序出现 “段错误(核心已转储)”
    vector容器中添加和删除元素
    NCCloud 指令示例
    c++ find函数用法
  • 原文地址:https://www.cnblogs.com/qinying/p/1826846.html
Copyright © 2011-2022 走看看