読者です 読者をやめる 読者になる 読者になる

express-sessionのざっくり翻訳2

node.js express express-session

express-sessionのざっくり翻訳1
express-sessionのざっくり翻訳2

node.jsでexpressを使いつつ色々実装しようと思っていて、express-passportで認証をしようとしていましたが、express-sessionが登場してしまったので、先にexpress-sessionについて公式をざっくりと斜め読みしました。
そのときのざっくり翻訳です。正確さは低めです。また、別のサイト等で自分で調べたことやコメントは(⇒ )としています。

参考:公式(2017/1/26)

  • (⇒express-sessionはセッションをうまいことやってくれるAPIです。)

  • 前提

  • インストール
  • API ☆途中から
  • Session Store Implementation ☆今回

2. API ☆途中から

req.session

sessionデータの保管、アクセスのために、単純に req.session を使うことができます。
保存環境により、JSON形式でserializeされています。以下が例で、ユーザのアクセスカウンタです。:
//公式より丸コピ

// Use the session middleware
app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))

// Access the session as req.session
app.get('/', function(req, res, next) {
  var sess = req.session
  if (sess.views) {
    sess.views++
    res.setHeader('Content-Type', 'text/html')
    res.write('<p>views: ' + sess.views + '</p>')
    res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>')
    res.end()
  } else {
    sess.views = 1
    res.end('welcome to the session demo. refresh!')
  }
})
Session.regenerate(callback)
メソッドを呼び出し、セッションを再生成します。完了すると、新しい SIDとSessionがreq.sessionで初期化され、callbackが実行されます。(例省略)

Session.destroy(callback)
セッションを破棄し、req.sessionを未設定とします。完了後、callbackが実行されます。(例省略)

Session.reload(callback)
セッションを保管場所から再取得し、res.session に再設定します。
完了後、callbackが実行されます。(例省略)

Session.save(callback)
メモリ上にある内容でstoreの情報を置き換えることで、storeにsessionを保存します。
このメソッドはsessionのデータが編集された場合、HTTPレスポンスの最後に自動的に呼び出されます。
例えば WebSocketや長く生き続けるリクエストを扱うときに有用です。(例省略)

Session.touch()
.maxAgeプロパティを更新します。普通は実行する必要はなく、middlewareが勝手にやってくれます。

req.session.cookie

それぞれのsessionはそれぞれ固有のcookie objectを持っています。なので、アクセスしてくる人ごとに session cookieを編集することができます。
例えば、req.session.cookie.expres をfalseに設定して user-agent? の間にだけcookieを残しておくことができます。

Cokkie.maxAge
req.session.cookie.maxAgeの代わりに残り時間をミリ秒で返します。また、.expiresに値を再設定するために使用できます。(中略)

req.sessionID

読み込まれた session のIDを取得するために、req.sessionID を参照できます。読み取り専用の値で、sessionが読み込まれるか、生成された際に設定される値です。

3. Session Store Implementation

各 session store は EventEmitter であり、特定のメソッドが実装されている必要があります。

・必須のメソッドは必ずstoreで呼ばれるメソッドです。
・推奨されるメソッドは使用可能であればstoreで呼ばれるメソッドです。
・任意のメソッドは、このモジュールが呼び出すことはありませんが、ユーザに適したstoreを提供するのを助けます。

store.all(callback)
Optional
storeにある全ての session を配列として取得します。
callbackは callback(err, sessions)として呼び出されます。

store.destroy(sid, callback)
Required
session ID(sid)をもとに、storeから sessionを破棄します。callbackは sessionを破棄したあとにcallback(err)として呼びだされます。

store.clear(callback)
Optional
storeから全ての sessionを破棄するために使われます。callbackは、破棄が行われた後に callback(err)として呼び出されます。

store.get(sid, callback)
Required
session ID(sid)をもとに、storeから sessionを取得します。callbackは callback(err, session)として呼び出されます。
引数のsessionは見つかる場合はその sessionが、見つからない場合は nullか undefinedが設定されエラーは起こりません。(中略)

store.set(sid, session, callback)
Required
session ID(sid)とsessionオブジェクトを storeにupsertします。
callbackはstoreにsessionが設定された後 callback(err)として呼び出されます。

store.touch(sid, session, callback)
Recommended session ID(sid)とsessionオブジェクトに "touch"します。(⇒touchとは?)
callbackはsessionがtouchされた後に callback(err)として呼び出されます。

主にstoreによって、不要な sessionを自動的に破棄したり、sessionが有効であることをstoreに伝えるために使用されます。潜在的にidle timerをリセットしています。

Compatible Session Stores

express-sessionに互換性のあるmodule集
公式を参照

Example

公式を参照