[英]Session values on Meteor reset when page reloads
重新定義頁面時,我定義的值不會持久。
if (Meteor.isClient) {
Session.setDefault('user_id', null);
Template.register.events({
'submit form': function(event){
var password = getHash(event.target.password.value);
var name = event.target.name.value;
console.log(Session.get('user_id')); //always show the default
var now = new Date();
password = getHash(password);
IDS.insert({name: name, online: false, password: password, last_activity: now,last_login: now, created_at: now},function(error,id){
Session.set('user_id',id);
//not persisting
});
event.target.password.value = '';
event.target.name.value = '';
}
});
}
我究竟做錯了什么?
正如馬里烏斯·達里拉(Marius Darila)在評論中解釋的那樣,流星會話在瀏覽器刷新過程中不會持續存在。 它僅在客戶端應用程序內保留。 在瀏覽器上刷新頁面時,它實際上是“重新引導”客戶端,將其Session重置為空狀態。 (加上在啟動時默認設置的任何變量,例如user_id
設置為null
)
在Meteor中,默認情況下,數據只能在重新啟動應用程序后在mongodb數據庫中保留。 您可以找到許多社區軟件包,這些軟件包為您提供了其他數據持久性方式,例如用於瀏覽器localStorage的持久性會話軟件包,或用於服務器端文件存儲的CollectionFS 。
當您手動刷新頁面時,會話不會持續。 pingo和BraveKenny的所有先前答案都正確地指向了這一點。 但是當Meteor執行熱代碼重載時,它將保留會話數據,因為刷新不是由用戶而是由服務器要求的。 這是Session保持刷新的唯一用例,但這種情況不應該經常發生。
需要添加這一行:
Tasks = new Mongo.Collection("users");
到服務器部分:
if (Meteor.isServer) {
// This code only runs on the server
Tasks = new Mongo.Collection("users");
}
這將保留數據。 或者,您可以將其添加到js文件的if(Meteor.isClient)部分上方。
https://www.meteor.com/tutorials/blaze/collections
這是新手,但碰巧也在學習流星。 讓我知道這個是否奏效。 謝謝 !
恕我直言,你沒有做錯,只是以一種不正確的方式! 為什么不使用帳戶包,而是使用Meteor.userId()
呢? 而且它也是反應性的! Btw會話表示客戶端本地存儲,不在服務器端,並且每次重新加載瀏覽器時都為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.