MENTAのバンドルプラグイン「session.pl」を使うと、簡単にセッション管理ができます。
いちいち説明するよりも、デモを見たほうが早いかもしれません。MENTAのディレクトリに移動し、サーバを起動します。
$ cd ~/lib/menta $ perl bin/cgi-server.pl HTTP::Server::Simple: You can connect to your server at http://localhost:5555/
そして、http://localhost:5555/demo/sessionを開くと、以下のようなページが表示されます。
このページは、app/controller/demo/session.mt にあります。見ての通り、コントローラではなく、MENTA::Templateに埋め込む形でセッションを利用しています。
session管理の使い方
このプラグインの使い方はとても単純です。
- session_session_id() … 一意なセッションIDを返します。隠しフィールドなどに埋め込んだりできます。
- session_set( “NAME”, value ) … セッションに値を格納します。
- session_get( “NAME” ) … 格納した値を取り出します。
- session_keys() … 格納した値のKEYの配列を返します。
- session_remove( “NAME” ) … 指定したKEYを削除します。
- session_as_hashref() … セッションの値をハッシュリファレンスにして返します。
- session_expire() … セッションを終了します。 ※引数は取らない
- session_regenerate_session_id( [delete old?] ) … セッションIDを再生成します。引数がtrueの場合は値も破棄します。
- session_logout_url( “http://localhost/demo/” ) … ログアウト時のリダイレクト先を指定します。引数を指定しない場合、デフォルトで docroot() が使われます。
以下はあまり使わなそうなメソッド。
- session_state_class() … セッションの状態管理クラスオブジェクトを返す。(HTTP::Session::State::Cookie)
- session_store_class() … セッションの保存クラスオブジェクトを返す。(HTTP::Session::State::Cookie)
ほとんどが HTTP::Session のメソッドをラップしたものなので、HTTP::Session についても見ておくといいかもしれません。
セッションの保存について
セッションは利用すると自動で保存されます。サーバ側では app/data にDBMファイルが保存され、クライアント側ではCookieとしてセッションIDが保存されます。このCookieはブラウザのセッション終了時に破棄されます。
このCookieをどうにか永続的に保存できないかと考え、ちょっと自分でハックしてみました。
新しく以下のメソッドを追加しました。
- session_set_expire( [new val] ) … 引数を指定した場合、セッションの有効期限を設定します。無引数の場合は現在の有効期限を返します。
これを利用したデモを以下に載せておきます。
このexpiresの指定方法は、CGI::Cookie や、それを利用した CGI と同じです。
以下に例として、CGI.pmのPODの一部を載せておきます。
- +30s … 30秒後
- +10m … 10分後
- +1h … 1時間後
- -1d … 昨日(つまり破棄)
- now … 今すぐ(つまり破棄)
- +3M … 3ヶ月後
- +10y … 10年後
- Thursday, 25-Apr-1999 00:40:33 GMT … 日時の絶対指定




コメントする