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是否可以多個瀏覽器共享(點擊打開鏈接



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