2013-07-30 213 views
1

我正在尋找客戶端JS庫來存儲會話變量。客戶端JS會話庫

我想要一個支持替代存儲介質的庫,例如cookie可用時可以使用其他技術。 例如,我發現這一個(但上次更新是在2009年): http://code.google.com/p/sessionstorage/

我不感興趣安全(除了有些應用程序之間的數據隔離的),因爲我不打算存儲敏感數據。

舉一個用例的例子,我想爲Chrome用戶顯示一條消息「Chrome用戶?下載應用程序」,我想在會話中保持一個狀態以避免再次顯示消息用戶。我不希望啓用服務器端會話,因此我必須能夠爲不同的用戶提供完全相同的頁面。

回答

2

如果可用,您可以使用localStorage,如果不是的話,那麼使用Cookie(或任何你覺得):

var appToken = createToken(); 
try { 
    if (localStorage.getItem) { 
     localStorage.downloadAppAlert = appToken; 
    } else { 
     setCookie('downloadAppAlert', appToken, 10); // name, a string value, num. of days 
    } 
} catch(e) { 
    console.log(e); 
} 

然後你可以使用一些功能來設置你的cookies - 即這一項,我只是在w3schools發現:

function setCookie(c_name,value,exdays) 
{ 
    var exdate=new Date(); 
    exdate.setDate(exdate.getDate() + exdays); 
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString()); 
    document.cookie=c_name + "=" + c_value; 
} 

取回cookie的值由它的名字 - 在本例中downloadAppAlert - 您可以使用W3Schools的鏈接或類似這樣的東西就一個:

function readCookie(name) { 
    var nameEQ = name + '='; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
    var c = ca[i]; 
    while (c.charAt(0)==' ') c = c.substring(1,c.length); 
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 
    } 
    return null; 
} 

此外,對localStorage您只需檢索先前設置好的項目:

var appToken = localStorage.getItem('downloadAppAlert'); 

編輯:對不起,與趕到我忘了提什麼createToken()一樣。它應該是一個隨機的字母數字發生器功能。您可以在SO找到很多,如:

Random alpha-numeric string in JavaScript?

Generate random string/characters in JavaScript

Generating (pseudo)random alpha-numeric strings

+0

感謝您的詳細回覆。實際上,我正在更多地從一個圖書館中抽象出LS/cookies /其他東西之間的選擇...... – ecesena

+0

好吧,希望這有助於防止爲您的目的找到已建成的圖書館。無論如何,恕我直言,爲這個特殊問題添加一個庫,而不需要某種級別的安全性,是沒有必要的。 – TMichel