经过研究,似乎 Meteor 会话在刷新页面或在新选项卡中打开网站后被重置,即它们不是通常的服务器端会话,而是客户端上的全局 javascript 变量。有些人建议使用 AmplifyJS,但我不确定它是否会像其他框架/语言中的常规会话一样工作,而且它也是第三方库,所以有什么正常的方法可以在 Meteor 中使用会话,即保持用户-服务器上的具体数据?
目前我正在使用自定义集合来处理这个问题,但这不是一种理想的方式,因为需要手动从集合中删除过期值,这会带来额外的麻烦。
是的,这是正确的。尽管名称Session
一点也不像 cookie,而只是存储在 hashmap 中的变量的反应形式
要在选项卡之间保持数据持久性,您需要使用集合(因为这是在选项卡之间被动共享数据的唯一方法) - Cookie 无法工作,因为它们不能被响应,因为需要将数据发送到服务器以有变化时通知客户。目前确实没有其他方法,因为发布/订阅方法目前只能从集合中发送数据。
您可以将您现在拥有的设置与您的自定义集合一起使用。您可以使用服务器端 cron 作业删除过期数据(使用Meteor.setInterval或Tom Coleman 的 cron。
有一个专门为此开发的包:https ://atmospherejs.com/u2622/persistent-session
安装后,您可以使用以下功能来设置持久会话:
//store a persistent session variable which is stored across templates
Session.setPersistent(key, value);
//same as above, but automatically deletes session data when user logs out
Session.setAuth(key, value);
我试过这个包,它就像魅力一样。