2012-11-17 9 views
5

ノードに基本セッションシステムを設定しようとしています。ここで私はこれまで持っているものです:Expressセッションが持続しない

app.js:

app.use(express.cookieParser('stackoverflow')); 
app.use(express.session()); 

私はajax.jsでセッションデータを設定しています:

addClassToCart: function(req, res) { 
    req.session.cart = req.body.classId; 
    console.log(req.session.cart); 
} 

これは正しい情報をログに記録します。私は他の場所(同じファイル、別の関数)、その情報を取得しようとすると、しかし、:

console.log(req.session.cart); 

を私はundefinedを取得します。私は信じられないほど基本的なものを見逃しているように感じる。このための様々なチュートリアルは、ひどいものですか、もっと多くのパッケージ(私が避けようとしているもの)を追加する必要があります。私のデバッグから

その他のデータ:

  • これは、非AJAXで動作しますが、それが記録される前のセッションが設定されている
  • 要求します。

答えて

5

明らかになったように、問題はExpressのセッションでは発生しませんでした(他の回答が考えているように)。むしろ、それは私の誤解でした。私は、次のようにaddClassToCartを変更:

res.send()問題を修正追加
addClassToCart: function(req, res) { 
    req.session.cart = req.body.classId; 
    console.log(req.session.cart); 
    res.send('class added'); 
    } 

+0

私は同様の問題を抱えています。セッションを持続させる応答トリガーを送信しましたか?それはまさに私ができないものです: – bitstream

+0

はい、応答を送信すると、セッションの更新がトリガーされました。 – SomeKittens

+1

ねえ! req.session.save()を実行して手動でアップデートをトリガすることで問題を解決しました。あなたは応答を送る必要はありません。 – bitstream

-1

私は、基本的なセッションストアについては知らないが、Redisのが唯一のセットアップに私に数分かかった:

brew install redis 
+1

>さらに、私が避けようとしているパッケージをさらに追加する必要があります。 – SomeKittens

-1
app.use(express.session({ 
    secret: "my secret", 
    store: new RedisStore, 
    cookie: { secure: false, maxAge:86400000 } 
})); 

わからない:Macでは

app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'poopy pants' 
    })); 

問題はセッション時代ですが、それはちょうど安全であるために、maxAgeを指定することをお勧めします。

+0

これは 'Redis'を追加する必要があります。私は明らかに、新しいパッケージをインストールしたくないという質問に答えました。 – SomeKittens

2

the answer to a related SO questionで述べたように、これはまた、あなたのサーバーからデータを取得するためにfetchを使用している場合に発生することができますが、あなたはcredentialsオプションに渡さない:クッキーが渡されることはありません

fetch('/addclasstocart', { 
    method: 'POST', 
    credentials: 'same-origin' // <- this is mandatory to deal with cookies 
}) 

このオプションを含める場合を除き、要求のセッションオブジェクトが新しい呼び出しごとにリセットされることを意味します。

関連する問題