Możesz użyć identyfikatora sesji każdego użytkownika, który jest unikalny również dla tej karty. Nie jestem pewien, jak uzyskać bieżący identyfikator sesji, ale powinno to być gdzieś tam (można zobaczyć go w Meteor.default_server.sessions
, więc nie jest jeszcze tak:
Klienta js
Meteor.call("test", Meteor.default_connection._lastSessionId, function(err,result) {
console.log(result);
});
stronie serwera 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);
}
});
spinanie do Meteor.default_connection._sessions
do przechowywania wartości tak, że jest tam jakiś rodzaj zbierania śmieci zaangażowanych gdy sesja jest nieprawidłowy już (tj. użytkownik zamknął swoje zakładki), aby zapobiec marnowaniu pamięci. W livedata_server.js
te stare sesje ulegają zniszczeniu po 1 minucie braku aktywności na przewodzie DDP (jak bicie serca).
Ponieważ serwer może zobaczyć sesję wszystkich użytkowników, można użyć sessionid
, aby uzyskać dostęp do danych sesji innego użytkownika. i listAllSessionids
, aby podać tablicę wszystkich aktywnych sesji.
Automatyczne ustawienie sesji jak this.userId w metodzie bez użycia param w rozmowie
Wygląda na to, że jest to funkcjonalność dla tego, ale to nie jest w pełni podłączona. Identyfikator sesji będzie przechowywany w this.sessionData
, ale prawdopodobnie nie zostanie ukończony. Jest tam zostać wezwany method
ale tam nigdzie, że jej jest jeszcze ustalone (w livedata_connection.js
& livedata_server.js
)
W jaki sposób wykorzystałeś sesję do zidentyfikowania każdej z nich? Nie działa zwykły obiekt JS/nie ma reaktywności na serwerze, więc byłby taki sam jak Session – Akshat
Normalny obiekt Js nie działa, ponieważ obiekty są dzielone między sesjami! Przetestowałem to logując się do konsoli za każdym razem, gdy obiekty są zdefiniowane, zawsze jest raz podczas uruchamiania serwera. –
Czy możesz pokazać kod użyty w poprzedniej wersji? – cmather