为什么Meteor会话变量在页面刷新时被清除

时间:2014-04-17 07:39:39

标签: meteor meteorite

我刚刚在我的meteor应用程序中注意到会话变量在页面刷新时被清除。所以

  1. meteor如何保存用户登录详细信息?
  2. 他们没有保存在会话中吗?
  3. 如何管理此问题?

2 个答案:

答案 0 :(得分:3)

Meteor.Session仅适用于客户端。它是您应用程序中的JavaScript全局对象。如果刷新页面,它就会被删除。您的会话存储在客户端localStorage https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage中。 Meteor不会将Cookie用于Session https://www.meteor.com/blog/2014/03/14/session-cookies

你需要解释更多你想要完成的事情。我加载页面后使用Meteor.Session,而不是很多东西,但为了获得我的初始状态,我的URL包含足够的信息来设置初始状态。

使用Meteor,您理想情况下不想刷新浏览器。理想情况下,AJAX和HTML5推送状态以及Meteor的反应性都会发生或应该发生。

您应该阅读他们的文档。这是关于会话的部分,http://docs.meteor.com/#session

答案 1 :(得分:0)

这是一个老问题,但由于我发现自己需要同样的事情,所以我就是这样做的。我在设置值时“扩展”会话以实际将其存储在localstorage上,并在页面加载时将localstorage加载到会话中。

// improving the session package to persist it to the localstorage
Session._set = Session.set;
Session.set = function(key,value) {
    Session._set(key,value);
    localStorage.setItem(key,JSON.stringify(value));
};


// helper function
function isJSON(str) { 
    try { 
        return (JSON.parse(str) && !!str); 
    } catch (e) { 
        return false; 
    } 
}

// loading the localstorate on load
for (var i = 0; i < localStorage.length; i++) {
    var key = localStorage.key(i);
    var value = localStorage.getItem(key);
    Session._set(key,isJSON(value) ? JSON.parse(value) : value);
}