ExpressとSocketIOを使用するノードアプリに取り組んでいます。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)
このドキュメントによると:ExpressNodeアプリを保護するための簡単な手順
オプションsecure=trueを設定すると、ブラウザはHTTPリクエストではなく、HTTPSセキュア接続でCookieを送信します。次に、secure:trueオプションを削除した後、Cookieが機能するようになりました。
したがって、httpでアクセスするには、次を使用できます。
res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?