Expressフレームワークと関連パッケージを利用したWebアプリケーション開発において、クッキーとセッションの管理方法を解説します。事前に必要なパッケージは以下のコマンドでインストールしてください。
npm install express cookie-parser cookie-session
まずは基本的なサーバー構築方法です。3行で完結するシンプルな実装例:
import express from 'express';
const app = express();
app.listen(3000, () => console.log('Server running on port 3000'));
クッキーとセッションの特性を整理します。
- クッキー:ブラウザ側に保存され、リクエストごとに送信される。セキュリティリスクあり(4KB制限)
- セッション:サーバー側で管理され、クッキー経由で識別される。理論上無制限のストレージが可能
クッキー操作の実装例:
import { express, Request, Response } from 'express';
import cookieParser from 'cookie-parser';
const app = express();
app.use(cookieParser('secure_signing_key'));
// 認証トークンの発行
app.post('/auth/login', (req: Request, res: Response) => {
const token = generateSecureToken(); // セキュアなトークン生成関数
res.cookie('auth_token', token, {
httpOnly: true,
maxAge: 86400000, // 24時間有効
signed: true
});
res.json({ status: 'authenticated' });
});
// クッキーの検証処理
app.get('/profile', (req: Request, res: Response) => {
if (req.signedCookies.auth_token) {
const userData = verifyToken(req.signedCookies.auth_token);
res.json(userData);
} else {
res.status(401).json({ error: 'Unauthorized' });
}
});
// クッキーの削除
app.post('/auth/logout', (req: Request, res: Response) => {
res.clearCookie('auth_token', { path: '/' });
res.json({ status: 'logged out' });
});
セッション管理の実装方法:
import session from 'cookie-session';
// 暗号化キーの生成
const crypto = require('crypto');
const sessionKeys = Array.from({ length: 5 }, () =>
crypto.randomBytes(32).toString('hex')
);
app.use(session({
name: 'app_session',
keys: sessionKeys,
maxAge: 7 * 24 * 60 * 60 * 1000 // 7日間有効
}));
// セッションデータの保存
app.post('/cart/add', (req: Request, res: Response) => {
req.session.cartItems = req.session.cartItems || [];
req.session.cartItems.push(req.body.item);
res.json({ items: req.session.cartItems.length });
});
// セッションの無効化
app.post('/session/destroy', (req: Request, res: Response) => {
req.session = null;
res.json({ status: 'session cleared' });
});
セッション管理では、複数の暗号化キーをローテーションさせることでセキュリティを強化できます。クッキーのhttpOnly属性を有効にし、XSS攻撃対策を施すことが重要です。