Node.jsでCookieを設定する方法
Node.jsでExpressフレームワークを使用してCookieを設定する方法
Node.jsはサーバーサイドのJavaScriptランタイムであり、ExpressはNode.js用の軽量かつ柔軟なウェブアプリケーションフレームワークです。Cookieはブラウザとサーバーの間で情報を保存するメカニズムであり、ユーザーのセッション管理や状態の追跡に役立ちます。
Cookieの設定手順
-
Expressアプリの作成
npm
を使用してExpressをインストールします。
npm install express
const express = require('express'); const app = express(); // ...
-
Cookie-Parserミドルウェアのインストール
cookie-parser
ミドルウェアは、Cookieを解析してリクエストオブジェクトにアクセスできるようにします。
npm install cookie-parser
-
cookie-parser()
ミドルウェアをアプリに適用します。
const cookieParser = require('cookie-parser'); app.use(cookieParser());
-
res.cookie()
メソッドを使用してCookieを設定します。
app.get('/', (req, res) => { res.cookie('username', 'John Doe', { maxAge: 900000 }); // 15分間有効 res.send('Cookie set!'); });
res.cookie()
メソッドの引数は次のとおりです。name
: Cookieの名前。value
: Cookieの値。options
: オプションオブジェクト。maxAge
: Cookieの有効期限(ミリ秒)。signed
: Cookieを署名するかどうか。httpOnly
: JavaScriptからアクセスできないようにするかどうか。secure
: HTTPS接続でのみ送信するかどうか。
例
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
const port = 3000;
app.use(cookieParser());
app.get('/', ( req, res) => {
res.cookie('user_id', 12345, { maxAge: 600000 }); // 10分間有効
res.send('Cookie set!');
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
このコードでは、/
エンドポイントへのリクエストを受け取ったときに、user_id
という名前のCookieを10分間有効に設定します。
Node.jsでCookieを設定する例
Expressフレームワークを使用した例
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
const port = 3000;
app.use(cookieParser());
app.get('/', ( req, res) => {
res.cookie('username', 'John Doe', { maxAge: 900000 }); // 15分間有効
res.send('Cookie set!');
});
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
解説
- Expressアプリの作成
express()
関数を使用してExpressアプリを作成します。 - Cookie-Parserミドルウェアの導入
cookieParser()
ミドルウェアをアプリに適用することで、Cookieの解析と設定が可能になります。 - Cookieの設定
/
エンドポイントへのリクエストを受け取ったときに、res.cookie()
メソッドを使用してCookieを設定します。username
という名前のCookieに値John Doe
を設定し、有効期限を15分間(900000ミリ秒)に設定します。res.send()
メソッドを使用して、Cookieが設定されたことをクライアントに通知します。
他の例
app.get('/set-cookie', (req, res) => {
res.cookie('user_id', 12345, { signed: true }); // 署名付きCookie
res.send('Signed cookie set!');
});
app.get('/get-cookie', (req, res) => {
const userId = req.signedCookies.user_id;
res.send(`User ID: ${userId}`);
});
- Cookieの取得
req.signedCookies
オブジェクトを使用して署名付きCookieを取得し、サーバー側で検証することができます。 - 署名付きCookie
signed: true
オプションを使用してCookieを署名することで、クライアント側での改ざんを防ぐことができます。
手動でのCookie設定:
- Expressのレスポンスオブジェクトの
setHeader()
メソッドを使用して、Cookieヘッダーを直接設定することができます。
app.get('/', (req, res) => {
res.setHeader('Set-Cookie', 'username=John Doe; maxAge=900000');
res.send('Cookie set!');
});
- この方法は、より細かい制御が必要な場合や、特定のCookie設定をカスタマイズしたい場合に使用できます。
サードパーティライブラリの使用:
- これらのライブラリは、セッションデータをサーバー側で保存し、Cookieを使用してクライアント側でセッションIDを管理します。
express-session
やconnect-redis
などのサードパーティライブラリを使用することで、セッション管理とCookieの統合をより簡単に実現することができます。
const session = require('express-session');
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true
}));
HTTPヘッダーの直接操作:
- Node.jsのHTTPモジュールを使用して、レスポンスオブジェクトのヘッダーを直接操作することもできます。
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Set-Cookie', 'username=John Doe; maxAge=900000');
res.end('Cookie set!');
});
server.listen(3000);
- この方法は、より低レベルの制御が必要な場合や、Expressフレームワークを使用しない場合に使用できます。
注意
- サードパーティライブラリを使用する場合は、そのライブラリのドキュメンテーションを参照して適切な設定を行う必要があります。
node.js cookies express