2018-10-27に更新

Expressのセッションにファイルを使う

Expressでアプリケーションを作る場合、express-sessionを使うことで簡単にセッションを利用できます。ただ、これはインメモリのセッションのため、サーバーを再起動するとセッションが消えてしまいます。そのため、ファイルのセッションを試してみました。

※ 引き続き検証中ですが状況によってうまくセッションが読み込めなかったりしています。

環境

  • Express 4.15
  • express-session 1.15

session-file-store

下記のライブラリを使いました。

valery-barysok/session-file-store: Session file store is a provision for storing session data in the session file

インストール

yarn add session-file-store

設定

元々あったセッションの設定を下記のようにsession-file-storeを使う形に変更します。

const session = require("express-session");
const FileStore = require("session-file-store")(session);

app.use(
  session({
    secret: "your secret",
    store: new FileStore({
      ttl: 30 * 86400
    }),
    expires: new Date(253402300000000),
    resave: true,
    saveUninitialized: false
  })
);

僕が試した時は、resaveを設定しないと(最初だけ?)セッションが保存されませんでした。(とはいえresaveはデフォルトtrueとマニュアルにも書かれていますが…謎です)

もしかすると有効期限など、他の設定と影響したりしても挙動が変わってくるかもしれません。

まとめ

Expressのプロジェクトでファイルに保存するセッションを試してみました。

実際はデータベースに保存したりする方が良いとは思います。でも一応mweibel/connect-session-sequelizeというパッケージはあったのですが、最新のSequelizeでは動作しないようでした。あまりそのあたりのパッケージは充実していないのでしょうか。

あとは速さを求めるならそのままインメモリのままでも良いのかもしれません。何かでデーモンが再起動してしまった時のことなどが気にはなりますが。

そういう面でもファイルは割とお手軽で良いと思います(まだがっつり動作確認はできていませんが)。不安な場合等はとりあえず開発環境だけセッションをファイルで保存するようにしておくと良いかもしれませんね。サーバーが再起動する度にログイン状態が消えたりするのは結構面倒ですし。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント