2012-11-14 13 views
27

Le sessioni Meteora vengono ripristinate quando si verifica un aggiornamento della pagina?Sessione meteore e aggiornamento del browser

Per qualche motivo non pensavo che lo facessero ma sembra che lo facciano. C'è un modo per farli persistere?

Se no quale sarebbe la soluzione migliore per questo?

Desidero consentire agli stessi dati di mostrare se un utente si aggiorna (questi dati sono specifici per l'utente) anche se non sono ancora registrati.

+0

Ho salvato alcuni dati comuni in Meteor.user, Quando l'aggiornamento della pagina è possibile reimpostarlo. – crapthings

+2

Sì, è solo che mi piacerebbe persistenza anche quando non sono loggati. – Jonovono

risposta

0

Il Session è un archivio di valori di chiave globale, uno reattivo.

http://docs.meteor.com/#session

Session fornisce un oggetto globale sul client che è possibile utilizzare per memorizzare un insieme arbitrario di coppie chiave-valore. Usalo per memorizzare cose come l'elemento attualmente selezionato in un elenco.

La particolarità di Session è che è reattivo. Se chiami Session.get ("currentList") dall'interno di un modello, il modello verrà rerenderizzato automaticamente ogni volta che viene chiamato Session.set ("currentList", x).

Se è necessario mantenere qualcosa nel client, è possibile utilizzare i browser localstorage o cookie se si cura per i browser meno recenti.

+0

Questo è in realtà ciò che fa il pacchetto Amplify, tranne con tutti i tipi di supporto di fallback. –

10

In realtà quello che si potrebbe fare è creare una "sottoclasse" di sessione che memorizza il valore nel negozio di Amplify quando set() è chiamato. Avresti automaticamente ereditato tutte le proprietà reattive di Session. Ecco il codice, ha funzionato per me:

SessionAmplify = _.extend({}, Session, { 
    keys: _.object(_.map(amplify.store(), function(value, key) { 
    return [key, JSON.stringify(value)] 
    })), 
    set: function (key, value) { 
    Session.set.apply(this, arguments); 
    amplify.store(key, value); 
    }, 
}); 

semplicemente sostituire tutti i tuoi Session.set/ricevere telefonate con SessionAmplify.set/ricevere telefonate. Quando viene chiamato set(), viene chiamato il metodo Session padre, nonché amplify.store(). Quando la "sottoclasse" viene creata per la prima volta, carica tutto ciò che si trova nella memoria di amplify all'interno delle sue chiavi, in modo che possano essere recuperate immediatamente con get().

È possibile verificare una variazione di lavoro dell'esempio Classifica qui: https://github.com/sebastienbarre/meteor-leaderboard

+0

come potrei usare questa tecnica se volessi solo mantenere una chiave in particolare di Session con amplifyjs, ma altrimenti lasciare che tutte le altre chiavi si comportino come al solito? c'è un modo per adattare il tuo metodo? – Petrov

+0

non sono sicuro se sebastien.b sia lo stesso autore, ma esattamente questo codice è disponibile come pacchetto, tramite l'installazione con mrt add session-amplify. progetto github qui: https://github.com/cramrov/meteor-session-amplify – mozboz

4

Ho appena creato il pacchetto UserSession per l'atmosfera, che è fondamentalmente un utente basata persistente Session.

+1

per chiarezza, questo pacchetto salva le variabili di sessione in una raccolta lato server. se stai cercando l'archiviazione lato client delle variabili di sessione, questo è ben realizzato con l'amplificazione, come da risposta di sebastien.b. – mozboz

+0

Buon pacchetto, ma si basa su userId, il che significa che abbiamo bisogno di un utente registrato. :( –

8

Questa è una domanda vecchia, ma è il secondo risultato della ricerca di "gestore di sessione di meteor", quindi penso sia importante aggiungere che il pacchetto u2622: persistent-session risolve perfettamente questo problema.

dalla documentazione a: https://atmospherejs.com/u2622/persistent-session

installazione

meteora aggiungere u2622: persistente sessione

Questo è tutto! Ora puoi usare Session.setPersistent per impostare una variabile di di sessione che salverà dopo un aggiornamento.

Se lo desideri, puoi fare in modo che anche Session.set lo faccia. Vedi la sezione Opzioni qui sotto.

+0

Grazie per questo, ha funzionato per me. L'unica cosa che dovevo cambiare nel mio codice era: cambiare Session.set (.. a Session.setAuth (; and Session.clearAuth (.. al logout. –

+0

Its potrebbe essere utile qui notare che, sotto il cofano della sessione persistente, la sua amplificazione funziona solo !! –

Problemi correlati