簡體   English   中英

重新加載頁面時,流星上的會話值重置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM