【问题标题】:Why is Meteor session variables getting cleared on page refresh为什么 Meteor 会话变量在页面刷新时被清除
【发布时间】:2014-06-01 09:07:43
【问题描述】:

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

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

【问题讨论】:

    标签: meteor meteorite


    【解决方案1】:

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

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

    【讨论】:

    • 有谁知道为什么Session.set 不使用localStorage? docs.meteor.com/api/session.htmlblog.meteor.com/… 没有提到它——似乎存储在 localStorage 中的唯一信息是身份验证令牌。如果流星/会话不使用 localStorage 在会话中持久化数据,他们为什么要提供?
    【解决方案2】:

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

    您需要详细说明您要完成的工作。一旦页面加载完毕,我就使用 Meteor.Session,而不是用于很多事情,但为了获得我的初始状态,我的 URL 包含足够的信息来设置初始状态。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2015-11-03
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      相关资源
      最近更新 更多