私のアプリケーションでは、エクスプレスフレームワークを使用してクッキーを設定する必要があります。次のコードを試しましたが、クッキーは設定されません。
誰かが私がこれをするのを手伝ってくれる?
var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
app.use(express.cookieParser());
app.use(express.static(__dirname + '/public'));
app.use(function (req, res) {
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })
console.log('cookie have created successfully');
});
});
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);
Expressでミドルウェアを使用する順序は重要です。先に宣言されたミドルウェアが最初に呼び出され、要求を処理できる場合は、後で宣言されたミドルウェアは呼び出されません。
express.static
がリクエストを処理している場合は、ミドルウェアを上に移動する必要があります。
// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());
// set a cookie
app.use(function (req, res, next) {
// check if client sent cookie
var cookie = req.cookies.cookieName;
if (cookie === undefined)
{
// no: set a new cookie
var randomNumber=Math.random().toString();
randomNumber=randomNumber.substring(2,randomNumber.length);
res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
console.log('cookie created successfully');
}
else
{
// yes, cookie was already present
console.log('cookie exists', cookie);
}
next(); // <-- important!
});
// let static middleware do its job
app.use(express.static(__dirname + '/public'));
また、ミドルウェアはどちらかリクエストを終了させる(応答を送り返す)か、リクエストを次のミドルウェアに渡す必要があります。この場合、クッキーが設定されているときにnext()
を呼び出すことによって後者を行いました。
Cookieを設定しますか?
res.cookie('cookieName', 'cookieValue')
クッキーを読む?
req.cookies
デモ
const express('express')
, cookieParser = require('cookie-parser'); // in order to read cookie sent from client
app.get('/', (req,res)=>{
// read cookies
console.log(req.cookies)
let options = {
maxAge: 1000 * 60 * 15, // would expire after 15 minutes
httpOnly: true, // The cookie only accessible by the web server
signed: true // Indicates if the cookie should be signed
}
// Set cookie
res.cookie('cookieName', 'cookieValue', options) // options is optional
res.send('')
})
正確にあなたの質問に答えるのではありませんが、私はあなたの質問が私の問題に対する答えを探しているのを見つけました。それで私はここにそれを投稿します、多分それは誰かに役立つでしょう。
私の問題は、クッキーがサーバーの応答に設定されているが、ブラウザによって保存されていないということでした。サーバーの応答がcookieを設定して戻ってきました。
Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT
しかし、クッキーはブラウザによって決して保存されませんでした。
これが私がそれを解決した方法です。
クライアントサイドコードでfetch
を使用します。 fetch
オプションでcredentials: 'include'
を指定しない場合、サーバーの応答によってCookieが設定されますが、Cookieはサーバーに送信されず、ブラウザによって保存されません。
例:
var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
return fetch('/your/server_endpoint', {
method: 'POST',
mode: 'same-Origin',
redirect: 'follow',
credentials: 'include', // Don't forget to specify this if you need cookies
headers: headers,
body: JSON.stringify({
first_name: 'John',
last_name: 'Doe'
})
})
誰かに役立つことを願っています。
クッキーを設定してください:
res.cookie('cookie', 'monster')
https://expressjs.com/en/4x/api.html#res.cookie
クッキーを読む:
( cookie-parser ミドルウェアを使用)
req.cookies['cookie']