web-dev-qa-db-ja.com

Expressでクライアント側のアクセス可能なCookieを設定する

私はNodeアプリに取り組んでいます。Expressコントローラーにcookieを設定し、クライアント側のJavaScriptコードからアクセスできるようにします。うまくいかないようです:

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

ここで見逃しているものはありますか?前もって感謝します!

32
dshipper

理解した!デフォルトでは、ExpressはオプションhttpOnlyをtrueに設定します。つまり、クライアント側のJavaScriptからCookieにアクセスすることはできません。クライアントでアクセス可能なCookieを正しく設定するには、次のようなスニペットを使用します。

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

また、このコマンドを呼び出してからres.redirectを呼び出すと、Cookieが設定されないことにも気付きました。このコマンドを機能させるには、ある時点でres.renderを実行する必要があります。なぜだかわかりません。

51
dshipper

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

これが私のコードです:

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

応答ヘッダーでSet-Cookie命令を確認できますが、Chromeではcookieが見つからず、req.cookies ['mycookie']でCookieが見つかりません。

この問題の根本的な原因は、HTTPS接続を使用しなかったことです。 (Cookieパーサーミドルウェアを備えたExpress 4.x)

このドキュメントによると: Expressを保護するための簡単な手順Node App

オプションsecure = trueを設定すると、ブラウザはHTTPリクエストでCookieを送信せず、HTTPSセキュア接続で送信します。次に、secure:trueオプションを削除した後、Cookieが機能しました。

3
ehe888

したがって、httpでアクセスするには、次を使用できます。

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