tag:crieit.net,2005:https://crieit.net/tags/session/feed 「session」の記事 - Crieit Crieitでタグ「session」に投稿された最近の記事 2018-10-27T17:52:56+09:00 https://crieit.net/tags/session/feed tag:crieit.net,2005:PublicArticle/14512 2018-08-21T22:09:13+09:00 2018-10-27T17:52:56+09:00 https://crieit.net/posts/Express Expressのセッションにファイルを使う <p>Expressでアプリケーションを作る場合、express-sessionを使うことで簡単にセッションを利用できます。ただ、これはインメモリのセッションのため、サーバーを再起動するとセッションが消えてしまいます。そのため、ファイルのセッションを試してみました。</p> <p>※ 引き続き検証中ですが状況によってうまくセッションが読み込めなかったりしています。</p> <h2 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h2> <ul> <li>Express 4.15</li> <li>express-session 1.15</li> </ul> <h2 id="session-file-store"><a href="#session-file-store">session-file-store</a></h2> <p>下記のライブラリを使いました。</p> <p><a target="_blank" rel="nofollow noopener" href="https://github.com/valery-barysok/session-file-store">valery-barysok/session-file-store: Session file store is a provision for storing session data in the session file</a></p> <h3 id="インストール"><a href="#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">インストール</a></h3> <pre><code class="sh">yarn add session-file-store </code></pre> <h3 id="設定"><a href="#%E8%A8%AD%E5%AE%9A">設定</a></h3> <p>元々あったセッションの設定を下記のようにsession-file-storeを使う形に変更します。</p> <pre><code class="javascript">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 }) ); </code></pre> <p>僕が試した時は、resaveを設定しないと(最初だけ?)セッションが保存されませんでした。(とはいえresaveはデフォルトtrueとマニュアルにも書かれていますが…謎です)</p> <p>もしかすると有効期限など、他の設定と影響したりしても挙動が変わってくるかもしれません。</p> <h2 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h2> <p>Expressのプロジェクトでファイルに保存するセッションを試してみました。</p> <p>実際はデータベースに保存したりする方が良いとは思います。でも一応<code>mweibel/connect-session-sequelize</code>というパッケージはあったのですが、最新のSequelizeでは動作しないようでした。あまりそのあたりのパッケージは充実していないのでしょうか。</p> <p>あとは速さを求めるならそのままインメモリのままでも良いのかもしれません。何かでデーモンが再起動してしまった時のことなどが気にはなりますが。</p> <p>そういう面でもファイルは割とお手軽で良いと思います(まだがっつり動作確認はできていませんが)。不安な場合等はとりあえず開発環境だけセッションをファイルで保存するようにしておくと良いかもしれませんね。サーバーが再起動する度にログイン状態が消えたりするのは結構面倒ですし。</p> だら@Crieit開発者