2016-01-21 48 views
-2

在我當前的項目中,每次他/她登錄到站點時都必須顯示一個Popup(歡迎信息)。在彈出窗口用戶有一個選項(Onclick CheckBox)來隱藏彈出窗口30天。如何創建一個可以存儲列表/數組的Cookie

我通過保存一個UserUniqueId cookie(這應該是一個數組/列表),當他/她點擊彈出框上的複選框來實現。如下

var UniqueId = "xxx"; 
    var uIDCookies = []; 

    // looping to get all the values that are stored in cookie 
    $.each($.cookie(), function(i, v) { 
     uIDCookies.push(i); 
    }); 

    // if current userUID not found in cookie then showing popup 
    if (($.inArray(UniqueId, uIDCookies)) === -1) { 
     //show popup 
    } else { 
     // hide popup 
    } 

    // create cookie and set expire time 
    $('.checkBox').on('click', function() { 
      var date = new Date(); 
      var minutes = 3; 
      date.setTime(date.getTime() + (minutes * 60 * 1000)); 
      $.cookie(UniqueId, { expires: date, path: '/' }); 
      //hide popup 
    }); 

不管是什麼,我通過循環被存儲在客戶端瀏覽器,以便所有cookie值,我覺得有可能是一個更好的方式來實現這一目標。建議請.. !!

+0

'$ .cookie(UniqueId)'? – Malk

+3

除非兩個用戶在同一臺​​瀏覽器上的同一臺計算機上登錄到該網站,否則Cookie中永遠不會有多個用戶。這是你需要處理的場景嗎?其次,將用戶標識保存在非加密的cookie中是一個非常糟糕的主意。 –

+0

Cookie在本地存儲在用戶的計算機上。我不明白爲什麼你應該有多個uuid,而你只有一個用戶。 –

回答

0

您正在保存以UniqueID作爲名稱的Cookie。只是檢查,如果該Cookie已經存在直接:

if (! $.cookie(UniqueId)) { 
     //show popup 
    } else { 
     // hide popup 
    } 
0

這聽起來非常很像一個非常糟糕的設計選擇,但要回答這個問題的提出,只是連載數組和字符串轉換爲Base64。然後你可以在之後再解析它。

正如在OP的評論中所提到的那樣,在你提到的場景中這是必要的邊緣情況很少。另外,不要在jQuery中設置或獲取cookie。儘可能使用您的服務器端語言來收集和設置Cookie信息,並將其發送到需要的頁面。不要在使用數據存儲更好的地方使用cookie。一旦設置了cookie信息,您就無法控制cookie信息,因此它們可以成爲應用程序中的安全載體。

Cookie存儲在每個配置文件,每個瀏覽器,每個用戶,每臺計算機上,因此並不總是存儲此信息的最佳方式。相反,請考慮在用戶個人資料表中添加兩列,DisplayWelcomeMessage作爲布爾值,SuppressWelcomeMessageExpiry作爲日期時間。這樣,信息就會按用戶設置,而不是每個Cookie。它允許應用程序具有更高的可擴展性,因爲它可以讓用戶在到期之前將其重新打開。

相關問題