我正在经历一些有点奇怪的事情,我无法做出正面或反面...我正在使用Meteor将sessionId从客户端发送到服务器但是每次刷新页面时, sessionId我得到的是不同的,不应该,我是否正确?
客户端
Meteor.call('logSession', Meteor.default_connection._lastSessionId);
服务器
Meteor.methods({
logSession: function(sid) {
console.log(sid);
}
})
为什么sid总是不同?
谢谢!
答案 0 :(得分:2)
为客户端和服务器之间的每个websocket会话创建_lastSessionId
。它代表websocket的会话&服务器端的状态,而不是cookie或持久性的东西。
刷新/打开另一个标签时,会创建一个新的websocket,这就是会话ID不同的原因。
每个会话ID表示客户端在服务器上拥有的数据的状态。这意味着服务器“知道”客户端在每个会话上具有哪些数据,具体取决于订阅,以便它知道要向下发送什么内容。如果某些内容发生变化,该特定标签会发生什么变化。
当您刷新页面时,您正在使用新的新状态,因此Meteor不会尝试使用以前的会话ID重新连接并恢复以前的状态,因为不需要恢复之前的状态订阅条款,因为用户希望页面是新鲜的。
如果您想在Cookie等标签页上使用某种形式的持久性,请使用localStorage
代替:
localStorage.setItem("foo", "bar");
console.log( localStorage.getItem("foo") );
=> "bar"