2012-11-14 166 views
27

當頁面刷新時,流星會話是否重置?流星會話和瀏覽器刷新

出於某種原因,我不認爲他們做了,但似乎他們這樣做。有沒有辦法讓他們堅持下去?

如果不是最好的解決方案是什麼?

我想允許相同的數據顯示用戶是否刷新(這些數據是特定於用戶的),即使他們還沒有註冊。

+0

我保存了Meteor.user中的一些常用數據,當頁面刷新可以設置它時。 – crapthings

+2

是的,這只是我想要堅持,即使他們沒有登錄。 – Jonovono

回答

0

Session是一個全球性的關鍵價值存儲,一個反應。

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

會議提供了可用於存儲鍵 - 值對任意一組客戶端上的一個全局對象。用它來存儲當前選中的項目在列表中。

Session的特別之處在於它是被動的。如果您從模板內部調用Session.get(「currentList」),則只要調用Session.set(「currentList」,x),模板就會自動重新渲染。

如果您在客戶端堅持的東西,你可以,如果你照顧舊的瀏覽器使用瀏覽器localstorage或餅乾。

+0

這實際上是Amplify軟件包的作用,除了各種後備支持。 –

10

其實你可以做的就是創建一個會話時設置()被調用中擴增的商店存儲價值的「繼承」。您將自動繼承Session的所有反應性屬性。這裏是代碼,它爲我工作:

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); 
    }, 
}); 

只需用SessionAmplify.set/get調用替換所有Session.set/get調用。當調用set()時,調用父級會話方法以及amplify.store()。當第一次創建「子類」時,它會將放大存儲區中的所有內容加載到其鍵中,以便可以使用get()立即檢索它們。

您可以測試這裏的排行榜示例的工作變化:https://github.com/sebastienbarre/meteor-leaderboard

+0

我怎麼能使用這種技術,如果我只想用amplifyjs持續一個特定的會話密鑰,但否則讓所有其他鍵像往常一樣?有沒有辦法改變你的方法? – Petrov

+0

不知道sebastien.b是否是相同的作者,但是這個代碼恰好作爲一個包提供,通過使用mrt add session-amplify進行安裝。 github項目在這裏:https://github.com/cramrov/meteor-session-amplify – mozboz

4

我剛剛創建的UserSession包氣氛,這基本上是一個基於用戶的持久Session

+1

爲了清楚起見,此包將會話變量保存在服務器端集合中。如果你正在尋找會話變量的客戶端存儲,根據sebastien.b的回答,這很好地通過放大來實現。 – mozboz

+0

很好的包,但它繼承userId,這意味着我們需要一個登錄用戶。 :( –

8

這是一個古老的問題,但它是搜索「流星會話管理器」的第二個命中,所以我認爲重要的是補充一點,u2622:persistent-session軟件包完美地解決了這個問題。

從文檔在: https://atmospherejs.com/u2622/persistent-session

安裝

流星添加u2622:持續會話

這就是它!現在你可以使用會話。setPersistent設置會話 變量,刷新後將保存。

如果你願意,你可以讓Session.set做到這一點。請參閱下面的 選項部分。

+0

感謝這個。它爲我工作。我只需要改變我的代碼是:改變Session.set(..到Session.setAuth(;和Session.clearAuth(..在註銷。 –

+0

它在這裏可能會很有用,值得注意的是,在持久會話的引擎下,它只能放大這個功能! –