| req[, sid, secret, timeout, lock, lockfile]) |
MPM がスレッドで動作しており、かつ fork していない場合 (Windows のようなケース です) や、スレッドで動作し fork してはいるがプロセス数が一つに制限されている場合 (このように動作させるには作業者 MPM (worker MPM) を設定します) 場合には MemorySession が使われます。 それ以外の場合にはDbmSession が使われます。
| req[, sid, secret, timeout, lock, lockfile]) |
このクラスは、実際のセッション保存メカニズムを実装している別のクラスの基底 クラスとして使われています。req は必須の引数で、mod_python のリクエストオブジェクトを参照していなければなりません。
BaseSession はdict のサブクラスです。 セッションを辞書として使うことで、データをセッションに保存したりセッションから 取り出したりできます。
sid はオプションのセッション id です。この値を指定する場合、該当する セッションが既に実在していなければなりません。該当するセッションが実在しない 場合、sid は無視され、新たなセッション id を持ったセッションが生成 されます。sid を指定しなかった場合、オブジェクトはクッキーの中から セッション id を捜し出そうとします。クッキー中にセッション id が見つかったが、 未知のセッション id だったりセッションが期限切れになっている場合、新たな セッション id を作成します。セッションが「新しい(new)」かどうかは、 is_new() メソッドを呼び出せば判別できます。
セッションで作成したクッキーは、サーバの DocumentRoot と
現在の処理を担当しているPythonHandler ディレクティブの場所
を比較して算出した path 属性を持ちます。例えば、ドキュメントルートが
/a/b/c でPythonHandler を指定した場所が/a/b/c/d/e
の場合、path は/d/e になります。ApplicationPath オプションを
使うと、特定のパス名を強制的に指定できます (サーバ設定内で、
"PythonOption ApplicationPath /my/path" のように指定します)。
secret を指定した場合、BaseSession はクッキー生成時に SignedCookie を使い、セッション id の偽造をほぼ不可能にします。 デフォルトでは通常の Cookie を使います (たとえ署名されていなくても、 セッション id は非常に推測しにくい方法で生成されています)。
セッションは、timeout 以上の間アクセスを受けないとタイムアウトします。 timeout のデフォルト値は 30 分です。期限切れのセッションに アクセスしようとすると「新たな」セッションが開始されます。
lock 引数はロックを行うかどうかを表します (デフォルト値は 1 です)。 ロックが有効になっている場合、一度に一つのセッション id について一つのセッション オブジェクトしかインスタンス化できません。このとき、lockfile はプロセス間 のロックに使うファイルの名前です。
セッション id が新たに生成された状態では、セッションは「新しい」といいます。 その逆は、セッション id をクッキーや sid 引数で指定した場合です。
| ) |
sess = Session(req)
if sess.is_new():
# redirect to login
util.redirect(req, 'http://www.mysite.com/login')
| ) |
| ) |
| ) |
| ) |
| secs) |
| ) |
| ) |
| ) |
| ) |
| ) |
| ) |
このメソッドはリクエスト処理の終了時に常にセッションのロックを解除する ような後処理関数を登録します。
| ) |
| ) |
| req, [, sid, secret, dbmtype, timeout, lock]) |
このクラスでは、グローバル名前空間上の辞書を使ったセッションストレージを 提供しています。このクラスはパフォーマンスの点では最高ですが、マルチプロセス の設定では利用できず、アクティブなセッションができるたびにメモリを消費するという 問題があります。
このクラスを直接使うとクロスプラットフォームにならないので注意してください。 できるだけプラットフォーム間での互換性をもたせたければ、常にSession() を使うようにしてください。
| req, [, dbm, sid, secret, dbmtype, timeout, lock]) |
このクラスでは、dbm ファイルを使ったセッションストレージを 提供しています。dbm のアクセスは非常に高速で、ほとんどの dbm 実装では メモリマップファイルを使って高速化を実現しているため、ほぼ共有メモリ アクセスに近いパフォーマンスを出せます。
dbm は dbm ファイルの名前です (ファイルは httpd プロセスから読み書き
できなければなりません) このファイルはサーバプロセスが停止しても削除されません
(このため、サーバが再起動してもセッションは死なないという便利な副作用があります)。
デフォルトでは、セッション情報はtempfile.gettempdir() 標準ライブラリ
関数の返す一時ディレクトリ下の mp_sess.dbm というファイルになります。
このデフォルト値は PythonOption SessionDbm filename を設定して
オーバライドできます。
実装では Python の anydbm モジュールを使っています。 このモジュールは、デフォルトではほとんどのシステムで dbhash を 使います。特定の dbm 実装 (例えば gdbm) を使いたければ、 dbmtype にモジュールを渡せます。
このクラスを直接使うとクロスプラットフォームにならないので注意してください。 できるだけプラットフォーム間での互換性をもたせたければ、常にSession() を使うようにしてください。