ページの作成や編集にはユーザ登録が必要です。
セッション管理の仕様を変更するパッチ
- 投稿者: A_M
- カテゴリ: 新規
- 優先度: 低
- 状態: 提案
- 日時: 2007年10月23日 13時21分12秒
内容
『セッションの確立=ログイン状態の記憶』となっている現在の仕様を『セッションの確立=UAのアクセス状態を一定期間記憶』と変更します。
動機
多数のユーザに動作について、意図したとおりにならない等のコメントが寄せられており、上手く管理する方法は無いかを模索中です。
- BugTrack-wiki/288
- BBS-サポート掲示板/489
- BBS-サポート掲示板/246 mattoさんのコメント
- など
メリット
- Farm毎にログイン状態を共通のセッションIDで管理できるようになる
- セッションをキャッシュとして利用するようなプラグインを作成できるようになる
- 閲覧者自身がアクセスしたページの履歴を表示する等
- 後述のデメリットを逆に活かし、現在のアクセス数を大まかに表示する等のプラグインを作成できる。
- 30秒以内に更新されたセッションファイル数をカウント表示(厳密な表現ではありませんが)するなど。
デメリット
長期間、アクセスのあったUA毎に複数のセッションIDをサーバで管理するため、スペースの小さなWEBサーバでは運用できなくなる。
実装機能
- アクセス時にセッションを確立
- ログイン時には確立されたセッションに「ログイン状態」をWiki(Farm)単位で記録する
- ログアウト時には確立されたセッションに「ログイン状態」をWiki(Farm)単位で抹消する
- 一定期間を過ぎると強制削除
未実装機能
- 上位Wikiでのログイン状態を子Wiki、孫Wikiに継承する機能は未実装
- 標準のFSWikiでは実装されています。
パッチ適用の前後
適用前(標準の動作)
- ログイン時に限りセッションを確立
- サーバー上にCGI-Session ログファイルを生成
- UA に Cookie (CGISESS) を記憶
- ログアウトと同時に削除
- サーバー上にCGI-Session ログファイルを抹消
- UA の Cookie (CGISESS) を無効化(期限切れとして再発行)
適用後
このパッチで実装するセッション管理を図示してみます。
--+----+-------+--------+-------+-------+------> 時間 | | | | | | | (2) (2') (3) (3') | (1) (4) (1)UAでアクセスすると、CGI-Session ログ生成 "cgisess_*"ファイルを生成 Cookie 発行 (2)ログインすると、セッションを更新 パラメータ'Wiki'に、ログインした状態を設定(期限付) (2')Farmにログインすると、セッションを更新 パラメータ'Farm'に、ログインした状態を設定(期限付) (3)ログアウトすると、セッションを更新 パラメータ'Wiki'を削除 (3')ログアウトすると、セッションを更新 パラメータ'Farm'を削除 (4)生存期間を過ぎると、CGI-Session ログ抹消 "cgisess_*"ファイルを削除 Cookie は操作せずとも期限切れ
パッケージ
コアを修正している為、diffファイルで提供します。
- diff.zip(716) 以下の3つのファイルがあります。それぞれ、Ver3.6.2dev2 でdiff取得しています。
- diff01.txt … plugin/admin/Login.pm
- diff02.txt … lib/CGI2.pm
- diff03.txt … lib/Wiki.pm
インストール
diffの内容に合わせて、パッチを適用してください(Perlが判る方のみ、自己責任でご利用ください)。
また、別途、setup.dat に、セッションファイルの生存期間を追記してください(分単位)。
session_file_limit = 360
影響プラグイン
- BugTrack-plugin/181 - TypeKeyを利用してユーザログインする機能/まかまか 氏
- BugTrack-plugin/241 - OpenIDを利用してユーザログインする機能/ここギコねね 氏
ライセンス
GPLでお願いします。
更新履歴
- 2007-10-23 ― diff.zip
- 初版公開
その他
- セッション管理の方法を変更することで、得られるメリット、デメリットは様々だと思います。
- 本パッチを適用される皆様には、運用面、開発面でのご意見をお聞かせいただけると幸いです。
- ソースの内容についてのご指摘も大歓迎です。
- Wiki(Farm)で固有のキーには、Util::cookie_path で強引に生成しています。この辺りのうまい方法などもお聞かせください。
最終更新時間:2007年10月23日 13時53分49秒