2017-10-21 3 views
0

NodeJSを使用してアプリケーションの単一ページを構築していて、Cookieセッション(cookie-session npm)を使用して、ユーザーがログインしているかどうかを確認します。私のノードサーバー側からは、セッションクッキーを取得して設定することができますが、クライアント側から取得する方法はわかりません。クライアントサイドからCookieセッションにアクセスするにはどうすればよいですか?

は、これは私が私のサーバー側から設定しています方法です:

req.session.user_id = user[0]._id; 

user[0]._idは私のMongoDBから取得し、私のユーザーIDです。

答えて

4

それでは、あなたがこのようなcookie-session何かを構成したと仮定しましょう

req.session.user_id = 123; 

あなたのブラウザの開発ツールで見れば、あなたはよ2つのクッキーセットを参照してください:

express:sess = eyJ1c2VyX2lkIjoxMjN9 
express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w 

クッキーexpress:sessはbase64でエンコードされます。デコードすると{"user_id":123}となります。セッションデータがクッキー自体に格納されていることを理解することが重要です。これはセッションのIDだけではありません。

他のクッキーexpress:sess.sigが署名です。このシグネチャは、キー(この例ではsecret)を使用して生成され、改ざんを防止するために使用されます。誰もがexpress:sessを変更するのは簡単ですが、対応するexpress:sess.sigも生成できない限り、サーバーは変更されたことを認識します。

私はあなたがexpress-sessionミドルウェアを見てみることをお勧めします。それはまた、クッキーを使用しますが、セッションIDを保存するためにのみ使用します。 Cookieに格納されているデータはすべてサーバーに格納されていません。これは、他のほとんどのWebフレームワークでセッションがどのように機能するかに似ていますが、どのアプローチがあなたのニーズに最も適しているかは確かではありません。

どちらのアプローチでも、デフォルトでhttponlyに設定されたCookieを使用します。ブラウザの開発ツールでこれを確認することができます。つまり、HTTPリクエストに含まれていますが、クライアント側のJavaScript経由ではアクセスできません。これは、悪質なコードがCookieを盗むのをより困難にするために設計されたセキュリティ対策です。あなたは使ってcookie-sessionでこのセキュリティ機能を無効にすることができます

app.use(cookieSession({ 
    httpOnly: false, 
    keys: ['secret'] 
})); 

あなたはその後、document.cookieを使用して、これらのクッキーにアクセスすることができます。

これはセキュリティ上の措置であり、オフにすることはお勧めしません。これがあなたのアプリケーションで真の関心事であるかどうかを判断することは不可能です。

実際にクッキーから値を解析するのか、それともその存在を確認するのかは、あなたの質問からはっきりしません。解析する必要がある場合は、関連するCookie値をbase64でデコードし、JSONでデコードする必要があります。

クッキーを維持するために採用する可能性のあるさまざまな方法があります。httponlyあなたがこの情報を使って何をやろうとしているかについての詳細がわからなければ、具体的にするのは難しいです。 Expressビュー(テンプレートレンダリング)を使用している場合は、テンプレート内のすべての作業を行うことができます。あなたがSPAの地域にいるなら、おそらくAJAXリクエストを使って関連情報を収集することができます。ピンチでは、セッションクッキーを安全に保ちながら、必要な情報を提供するために別のクッキーを使用することさえできます。

0

セッションはサーバー側のものです。クライアント側でセッションにアクセスすることはできません。クッキーを意味するのであれば、セッションに関する何も含まれていませんが、IDはそれを指しています。クライアント側のセッションから情報を取得するには、要求を作成し、サーバーがセッション情報を返信する必要があります。

var cookieSession = require('cookie-session'); 

app.use(cookieSession({ 
    keys: ['secret'] 
})); 

は、その後のセッションでいくつかのデータを格納してみましょう:

+0

彼は、セッションデータをデシパー/サイファーし、その内容をクライアントデバイスに保存する 'cookie-session'パッケージについて話しています – num8er

関連する問題