1

我正在寻找一个客户端 JS 库来存储会话变量。

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

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

举一个用例示例,我想为 chrome 用户显示一条消息“Chrome 用户?下载应用程序”,并且我想在会话中保持状态以避免再次向同一用户显示该消息。我不想要服务器端会话,因为我启用了缓存,所以我必须能够为不同的用户提供完全相同的页面。

4

2 回答 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 - 即我刚刚在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 上找到很多内容,例如:

JavaScript中的随机字母数字字符串?

在 JavaScript 中生成随机字符串/字符

生成(伪)随机字母数字字符串

于 2013-07-30T17:43:48.120 回答
1

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

于 2014-01-02T11:47:45.617 回答