2013-10-27 16 views
5

Nella mia app meteorica sto utilizzando Session per memorizzare informazioni temporanee sull'attività dell'utente. Mi piacerebbe mantenere alcune parti di queste informazioni nel browser con amplify.js, ma non tutte.Meteor js: rende parzialmente persistente l'oggetto Session

Vorrei un modo per avere chiavi di sessione "temporanee" e chiavi di sessione "persistenti". Ad esempio, ho potuto chiamare

Session.set('persistent', 'this is persisted to browser memory'); 
Session.set('temporary', 'this will be erased on page reload, etc'); 

e poi, dopo una pagina di ricaricamento

Session.get('persistent'); // returns 'this is persisted to browser memory' 
Session.get('temporary'); // returns undefined 

ho trovato a related post on SO ma questo consente di risparmiare questo approccio persiste l'intero oggetto di sessione, che io non voglio fare. Inoltre, non voglio usare MongoDB per questo, mi piacerebbe che lo storage fosse puramente client ...

Mille grazie in anticipo!

+1

Da quello che ho capito, il post collegato avrebbe funzionato per voi. Usa il normale 'Session' quando vuoi le chiavi di sessione 'temporanee' e usa il' SessionAmplify 'esteso quando vuoi le chiavi di sessione' persistenti '. – dayuloli

risposta

9

Utilizzare localStorage. E 'un po' difficile se si vuole che sia reattivo, ma credo che si potrebbe usare Session per ottenere che fare accanto localStorage

All'avvio ottenere l'oggetto dal vaso localStorage del browser

Meteor.startup(function() { 
    Session.set("yourItem", localStorage.getItem("yourItem")); 
}); 

Quando impostandolo :

localStorage.setItem("yourItem", "yourValue"); 
Session.set("yourItem", localStorage.getItem("yourItem")); 

una cosa che non è possibile a meno di utilizzare MongoDB o qualcosa è se si imposta questo su una scheda, esso non cambierà sugli altri fino a quando si aggiorna la pagina. Ma suppongo che Session sia così comunque.

+1

Sono d'accordo con localstorage, anche se userei amplify (che funziona come interfaccia su localstorage, cookie e materiale correlato) –

+0

perché abbiamo bisogno di 'Session' allora? –

+1

@ VittorFerreira Per renderlo reattivo. localStorage da solo non è reattivo. – Akshat

6

Ho avuto successo con l'utilizzo del pacchetto u2622:persistent-session leveraggi capacità di archiviazione locale amplify.js mentre consente di utilizzare l'oggetto Meteor Session per impostare e accedere alle informazioni.

Dopo aver fatto meteor add u2622:persistent-session, si può quindi andare avanti e fare cose come:

  • Session.setPersistent(key, value)
  • Session.setDefaultPersistent(key, value)

u2622:persistent-session mantiene i vostri dati tra schede e ricariche, a meno che non si cancella manualmente il browser di memoria locale.

Checkout la Github page per ulteriori informazioni