今天做了一個轉賬輸入頁,遮罩層廣告控制的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是否可以多個瀏覽器共享(點擊打開鏈接)