私はNodeアプリに取り組んでいます。Expressコントローラーにcookieを設定し、クライアント側のJavaScriptコードからアクセスできるようにします。うまくいかないようです:
res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });
ここで見逃しているものはありますか?前もって感謝します!
理解した!デフォルトでは、ExpressはオプションhttpOnlyをtrueに設定します。つまり、クライアント側のJavaScriptからCookieにアクセスすることはできません。クライアントでアクセス可能なCookieを正しく設定するには、次のようなスニペットを使用します。
res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false});
また、このコマンドを呼び出してからres.redirectを呼び出すと、Cookieが設定されないことにも気付きました。このコマンドを機能させるには、ある時点でres.renderを実行する必要があります。なぜだかわかりません。
実際、私は数時間同じ問題を経験しました。
これが私のコードです:
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が機能しました。
したがって、httpでアクセスするには、次を使用できます。
res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?