cookie杂学

今天做了一个转账输入页,遮罩层广告控制的cookie,但因cookie理解不深,造成了生产问题。

遮罩层的业务逻辑是:进入转账页面,会在页面下部占据五分之一的高度展示一个手机银行的广告~这里需要在弹出该遮罩层前,做一个判断:是否在14天内关闭过此悬浮层,如果关闭过,则14天内不再显示。

实现方式:不操作后台数据,只在前台做校验,目前想到最好的方式就是cookie。

实现逻辑:当客户点击关闭按钮时,触发JS,增加当前时间至cookie中;当客户首次进入6个功能页面之一时会获取cookie中该值,并与当前时间做对比,得到时间差,以天为单位,若大于14天则显示遮罩层;当然客户首次进入cookie中是没有该值得,所以得到时间差为null,也判断显示遮罩层。

BUG:未设置cookie生命周期,导致默认生命周期:浏览器关闭即失效。最重要的是:各种测试没测出来~各种测试没测出来~各种测试没测出来~直到上了生产,才发现这一BUG。。。

以下为修改后JS代码,望引以为鉴~

/*
 *@description(手机银行遮罩层专用) 判定用户是否14日内登陆,若未登陆则显示手机银行遮罩层
 *@author 
 */
function checkMobile_bgDate(){
	try{
		var cDate = new Date();
	    var currentDate = cDate.getTime();
	    
        if(cookie != null && cookie != undefined
                && cookie.getCookie() != null && cookie.getCookie() != undefined){
             //页面初始化时从cookie当中获取上次关闭时间
        	 var result =document.cookie.split("; ");
        	 var sub = null;
             for(var i = 0;i < result.length;i++){
                var temp = result[i].split("=");
                if(temp[0] == 'Mobile_bgDate'){           
	                 //从cookie当中读取值后与之前保留值做对比
	                 var lm = unescape(temp[1]);
	                 //得到相差天数
	                 sub = parseInt((currentDate-lm)/86400000);
	                 }
                }
                if(sub > 14 || sub == null){
                	window.top.showMobile_bg();//展示手机银行遮罩层
	            }
	        }
	    }catch(e){
 
	    }
	}
/*
 *@description(手机银行遮罩层专用)增加cookie时间
 *@author 
 */
function addMobile_bgDate(){
	var date = new Date();
    var currentDate = date.getTime();
    var cookieString ="Mobile_bgDate=" + escape(currentDate);
    date.setTime(date.getTime() + 24 * 14 * 3600 * 1000);//14天
    cookieString = cookieString + "; expires="+ date.toGMTString()+";";
    document.cookie=cookieString;


------------------------------分割线------------------------------------

深入学习cookie

从百度百科学起:点击打开百度百科哦

个人理解cookie是存放在客户端中的文本文件,它分为“Session Cookies”在浏览器运行时,在RAM中发挥作用,另一种是“ Persistent Cookies”当浏览器退出时存放在本地硬盘上,在有效期内可供下次调用。上面的BUG就是因为没有设置cookie的生命周期导致默认“Session Cookies”,浏览器关闭时即删除。

另发现一个易出错的点:在同一个页面中设置 Cookie,实际上是按从后往前的顺序进行的。如果要先删除一个 Cookie,再写入一个 Cookie,则必须先写写入语句,再写删除语句,否则会出现错误。

多个不同浏览器是无法做到共享cookie的,因为每个浏览器存cookie路径不是一样的,所以无法做到不同浏览器共享cookie。

如果是同一种浏览器,多个标签页共享的话,再生成cookie的时候添加cookie的有效期;否则cookie为会话cookie,这种客户端是不会把cookie存到硬盘上的,其他标签也无法获取到cookie。

在不同版本的浏览器中对cookie有着不一样的支持,调用原理也有所不同,看各位大神遇到的问题:

IE、火狐等时区对cookie生命周期的影响(点击打开链接

测试不同浏览器对cookie长度限制测试(点击打开链接

测试cookie是否可以多个浏览器共享(点击打开链接



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章