È possibile utilizzare l'ID di sessione di ciascuno che è anche unico per la scheda. Non troppo sicuro di come ottenere la corrente id di sessione, ma dovrebbe essere lì da qualche parte (si può vedere in Meteor.default_server.sessions
, quindi c'è ancora un modo:
client js
Meteor.call("test", Meteor.default_connection._lastSessionId, function(err,result) {
console.log(result);
});
lato server Js
Session = {
set : function(key, value, sessionid) {
console.log(Meteor.default_server.sessions[sessionid]);
if(!Meteor.default_server.sessions[sessionid].session_hash) Meteor.default_server.sessions[sessionid].session_hash = {};
Meteor.default_server.sessions[sessionid].session_hash.key = value;
},
get : function(key, sessionid) {
if(Meteor.default_server.sessions[sessionid].session_hash)
return Meteor.default_server.sessions[sessionid].session_hash.key;
},
equals: function(key, value, sessionid) {
return (this.get(key, sessionid) == value)
},
listAllSessionids: function() {
return _.pluck(Meteor.default_server.sessions, "id");
}
};
Meteor.methods({
test:function(sessionid) {
if(!Session.get("initial_load", sessionid)) Session.set("initial_load", new Date().getTime(), sessionid);
return Session.get("initial_load", sessionid);
}
});
collego in Meteor.default_connection._sessions
per memorizzare i valori in modo che theres un certo tipo di garbage collection coinvolti quando la sessione non è valido più (cioè l'utente ha chiuso le sue schede) per evitare di sprecare memoria. In livedata_server.js
queste vecchie sessioni vengono distrutte dopo 1 minuto di nessuna attività sul filo DDP (come l'heartbeat).
Poiché il server può vedere la sessione di tutti, è possibile utilizzare sessionid
per accedere ai dati di sessione di un altro utente. e listAllSessionids
per fornire una matrice di tutti gli sessionid attualmente attivi.
impostare automaticamente la sessione come this.userId in un metodo senza utilizzare un parametro in una chiamata
Sembra che ci sia la funzionalità per questo questo, ma la sua non è completamente collegato. L'ID di sessione verrebbe archiviato in this.sessionData
ma è probabilmente ancora incompleto. Il suo lì per essere chiamato in method
ma c'è da nessuna parte che il suo essere ancora impostata (in livedata_connection.js
& livedata_server.js
)
Come hai usato Session per identificarne ciascuna? Un oggetto JS ordinario funziona altrettanto bene/non ha alcuna reattività sul server, quindi sarebbe lo stesso di Session – Akshat
L'oggetto Js normale non funziona perché gli oggetti sono condivisi tra le sessioni! Ho provato questo accedendo alla console ogni volta che gli oggetti sono definiti, è sempre una volta all'avvio del server. –
Puoi mostrare il codice che hai usato nella versione precedente? – cmather