首页 文章

Client-side JS 会话库

提问于
浏览
1

我正在寻找一个 client-side JS 库来存储会话变量。

我想要一个支持替代存储介质的库,e.g. cookies 可用于其他技术的后备。例如,我找到了这个(但最后一次更新是在 2009 年):http://code.google.com/p/sessionstorage/

我对安全性不感兴趣(除了应用程序之间的一些数据隔离),因为我不打算存储敏感数据。

举一个用例示例,我想为 Chrome 用户显示一条消息“Chrome 用户?下载应用”,我希望在会话中保持状态,以避免再次向同一用户显示该消息。我不希望 server-side 会话因为我启用了缓存,所以我必须能够为不同的用户提供完全相同的页面。

2 回答

  • 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);
    }
    

    然后你可以使用一些功能来设置你的 cookie - i.e。我刚刚在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 值 - 在示例中下载 AppAlert - 您可以使用 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 上找到很多,例如:

    JavaScript 中的随机 alpha-numeric 字符串?

    在 JavaScript 中生成随机 string/characters

    生成(pseudo)random alpha-numeric 字符串

  • 1

    使用 mozilla 的 node-client-sessions(https://github.com/mozilla/node-client-sessions)。

相关问题