express-mysql-session とは?
Express のセッションを MySQL に保存するためのストレージです。内部的には MySQL にクエリを投げる仕組みが組み込まれています。
express-sessionと組み合わせて利用します。
- express-session がセッションの「管理」を行う
- express-mysql-session がその「保存先」として MySQL を扱う
express-mysql-sessionをインストールするには、以下のコマンドを実行します。
npm install express-mysql-session express-mysql-session は内部で mysql または mysql2 に依存します。
データベースの作成
認証機能があるアプリの場合、認証やアクセスのたびにセッションDBへ読み書きが発生し、負荷が高くなる可能性が考えられる場合、セッション管理のデータベースは分けて作成します。
テーブルは指定したデータベースにセッション用のテーブルが自動で作成されます。
# データベースを作成
CREATE DATABASE session_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# ユーザーを作成
CREATE USER 'session_user'@'localhost' IDENTIFIED BY 'password';
# ユーザーに権限を付与
GRANT ALL ON session_db.* TO 'session_user'@'localhost'; 基本的な利用方法
基本的な利用方法は以下のようにします。
const session = require('express-session');
const MySQLStore = require('express-mysql-session')(session);
const sessionStore = new MySQLStore({
host: 'localhost',
port: 3306,
user: 'session_user',
password: 'password',
database: 'session_db'
});
app.use(session({
key: 'myapp_session_id',
secret: "secret",
store: sessionStore, // MariaDB ストア
resave: false, // 毎回セッションを保存しない
saveUninitialized: false, // 未初期化セッションを保存しない
cookie: {
maxAge: 1000 * 60 * 60, // 有効期限 1時間
secure: false, // HTTPSのみならtrue
httpOnly: true // JSからアクセス不可
}
}));