对于同一选项卡,Meteor _lastSessionId始终不同

时间:2014-02-04 17:01:40

标签: session meteor

我正在经历一些有点奇怪的事情,我无法做出正面或反面...我正在使用Meteor将sessionId从客户端发送到服务器但是每次刷新页面时, sessionId我得到的是不同的,不应该,我是否正确?

客户端

Meteor.call('logSession', Meteor.default_connection._lastSessionId);

服务器

 Meteor.methods({
    logSession: function(sid) {
      console.log(sid);
    }
  })

为什么sid总是不同?

谢谢!

1 个答案:

答案 0 :(得分:2)

为客户端和服务器之间的每个websocket会话创建_lastSessionId。它代表websocket的会话&服务器端的状态,而不是cookie或持久性的东西。

刷新/打开另一个标签时,会创建一个新的websocket,这就是会话ID不同的原因。

每个会话ID表示客户端在服务器上拥有的数据的状态。这意味着服务器“知道”客户端在每个会话上具有哪些数据,具体取决于订阅,以便它知道要向下发送什么内容。如果某些内容发生变化,该特定标签会发生什么变化。

当您刷新页面时,您正在使用新的新状态,因此Meteor不会尝试使用以前的会话ID重新连接并恢复以前的状态,因为不需要恢复之前的状态订阅条款,因为用户希望页面是新鲜的。

如果您想在Cookie等标签页上使用某种形式的持久性,请使用localStorage代替:

localStorage.setItem("foo", "bar");

console.log( localStorage.getItem("foo") );
=> "bar"