1

Express/connectJS を使用し、セッションで遊んでいます。ConnectJS のドキュメントにはシンプルなビュー カウンターが用意されており、これは私にとってはうまくいきます。

ただし、Cookie オプション 'secure:true' を設定すると動作しなくなります。

app.use(express.session({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:true}})); 

私が見ているのは、「secure:false」の場合にのみ、セッション ID がリクエストで送信されることです。「secure:true」の場合、リクエストごとに新しい sessID を取得します。

これは失敗します。

Req header - SECURE:TRUE
Cookie connect.sid=s%3AP2q10tK255KdVcizJMwETG69.IU2idEzOVaCxahdcRoEGhTkUBK%2B1Evxc0boj97nJgHg;
connect.sess=s%3Aj%3A%7B%7D.opP3ZU2IoVMmmqws%2F5vFGB4s8FNXJ8R6RNZoF4KRNfU

これは機能します。

Req header - SECURE:FALSE 
Cookie connect.sid=s%3AP2q10tK255KdVcizJMwETG69.IU2idEzOVaCxahdcRoEGhTkUBK%2B1Evxc0boj97nJgHg;
connect.sess=s%3Aj%3A%7B%7D.opP3ZU2IoVMmmqws%2F5vFGB4s8FNXJ8R6RNZoF4KRNfU;
NodeJS=s%3ArBKqb-Wptr_IJMYW6VzJVu__.2Yc3GL32L%2BHuY4L5RxepdiEirtvbSlIeErWVIHXm4uc

誰かがここで何が起こっているのかを簡単に説明できますか、または適切な説明を教えてくれますか?

=============フォローアップ==============

セッション オプション 'secure' は、http または https を使用して切り替えます。

現在、セッション管理には、session と cookieSession の 2 種類があります。以下は、これらのそれぞれからの出力です。

セッション

app.use(express.cookieParser());
app.use(express.session({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:false}}));

=== req.sessionID ===
b1t73i-MjbyPfQaZHo7_0aGn

==== req.sessionStore ===
{ sessions: { 'b1t73i-MjbyPfQaZHo7_0aGn': '{"cookie":{"originalMaxAge":3600000,"expires":"2013-08-12T19:13:37.169Z","secure":false,"httpOnly":true,"path":"/"},"views":1}' } generate: [Function], _events: { disconnect: [Function], connect: [Function] } }

=== req.session ===
{ cookie: { path: '/', _expires: Mon Aug 12 2013 12:13:37 GMT-0700 (PDT), originalMaxAge: 3600000, httpOnly: true, secure: false }, views: 1 }

==== req.cookies ===
{ NodeJS: 's:b1t73i-MjbyPfQaZHo7_0aGn.RDYYqfFjjAYFry9PmQW/fih+PPMTgNK6uwy5EW372CE', woot: 'woot' }

=== req.signedCookies ===
{ swoot: 'swoot' }

クッキーセッション

app.use(express.cookieParser());
app.use(express.cookieSession({key:'NodeJS', secret:'cookie', cookie:{maxAge:3600000, secure:false}}));

=== req.sessionID ===
undefined

==== req.sessionStore ===
undefined

=== req.session ===
{ views: 1, cookie: { path: '/', _expires: Mon Aug 12 2013 12:20:16 GMT-0700 (PDT), originalMaxAge: 3600000, httpOnly: true, secure: false } }

==== req.cookies ===
{ NodeJS: 's:j:{"views":1}.JtWQMoqzLEZBoGSxbxXfyqFJ2KIYyJG9GDSY4rxdVLQ', woot: 'woot' }

=== req.signedCookies ===
{ swoot: 'swoot' }

SESSION は操作できるオブジェクトを返しますが、SESSIONCOOKIE をどのように処理すればよいですか?

4

2 に答える 2

1

URL エンドポイントは何ですか? http:// ですか、それとも https:// ですか? セッションに Cookie を使用する場合、Cookie が「安全」であれば、 https でない限りサーバーに送信されません。サーバーは Cookie を認識せず、接続をセッションに関連付けることができないため、新しいセッションを作成します。

于 2013-08-12T05:14:46.177 に答える