2012-06-10 12 views
30

私は、ExpressとSocketIOを使用するNodeアプリケーションで作業しています。クライアント側のJavascriptコードからアクセス可能なエクスプレスコントローラにクッキーを設定したいと思います。私が試したものはうまくいかないようです:Expressでクライアント側のアクセス可能なCookieを設定する

res.setHeader('Set-Cookie','test=value'); 
res.cookie('rememberme', 'yes', { maxAge: 900000 }); 

ここに何かがありますか?前もって感謝します!

+0

は、クライアント側のコードを表示するために役立つかもしれません。 – ebohlman

+0

私はちょうどChromeのインスペクタに行き、クッキーを見ています。しかし何も見ていない... – dshipper

答えて

48

それを実感してください!デフォルトでは、ExpressはオプションhttpOnlyをtrueに設定します。つまり、クライアント側のJavascriptではクッキーにアクセスできません。正しくちょうど次のようなスニペットを使用して、クライアント上でアクセス可能クッキーを設定するために:

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false}); 

私は、このコマンドを呼び出してから、res.redirectを呼び出す場合、クッキーがセットされますしないことにも気づきました。このコマンドを実行するには、ある時点でres.renderを続ける必要があります。これがなぜなのか分かりません。

+0

それは良い情報です。任意の機会にエクスプレスフレームワークのサーバー側でクライアント側のクッキーにアクセスする方法を知っていますか? – user644745

+5

@ user644745あなたは 'res.cookies'オブジェクトを見てExpressでクッキーを読むことができます。例えば、 'session_id'という名前のクッキーは' res.cookies.session_id'に存在します。 http://expressjs.com/api.html#req.cookies – frontendbeauty

+1

res.renderまたはres.sendを呼び出す必要がある理由は、Cookieを設定しても応答が開始されないためです。送信とレンダリングこのクッキーメソッドは、レスポンスオブジェクトにクッキーを追加するだけです。 –

3

実際、私は数時間同じ問題を経験しました。ここで

は私のコードです:

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true }); 

「私はレスポンスヘッダのSet-Cookieの命令を見ることができますが、Chromeで、私はクッキーを見つけることができないと私は[req.cookiesでクッキーを見つけることができませんmycookie]]。

この問題の根本原因は、HTTPS接続を使用していないことです。この文献によれば(エクスプレスクッキーパーサーミドルウェアと4.xの)

:私は真=安全なオプションを設定した場合Simple Steps to Secure Your Express Node App

、その後、ブラウザは任意のHTTPリクエストが、HTTPSの安全な接続で私のクッキーを送信しません。その後、私は安全な:本当のオプションを削除した後、私は私のクッキーの仕事を得た。

0

ので、HTTPでのアクセスに我々は使用することができます。

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });? 
関連する問題