MENTA でセッション管理 (session.pl)

| 【4分で読めるよ!】 | コメント(0) | トラックバック(0)

 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を開くと、以下のようなページが表示されます。

MENTA_1234498963631.png

 このページは、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.txt

 新しく以下のメソッドを追加しました。

  • session_set_expire( [new val] ) … 引数を指定した場合、セッションの有効期限を設定します。無引数の場合は現在の有効期限を返します。

 これを利用したデモを以下に載せておきます。

session2.mt

MENTA_1234500857500.png

 この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 … 日時の絶対指定

トラックバック(0)

トラックバックURL: http://e-arrows.sakura.ne.jp/mt/mt-tb.cgi/78

コメントする

このブログ記事について このアーカイブについて

このページは、深町英太郎が2009年2月13日 13:18に書いたブログ記事です。

ひとつ前のブログ記事は「MENTA での開発で困った3点」です。

次のブログ記事は「Amazon 上で図書館を検索するGreasemonkey」です。

Ariel Labs
Name:深町英太郎
Age:23歳
Living:京都府
Company:はてな
Hatena Id:id:nitro_idiot
Facebook:eitarow.fukamachi
mixi:ID:6756132
Twitter:nitro_idiot
GitHub:fukamachi
LinkedIn:eitarowfukamachi

Techonrati

Technorati search

» リンクしているブログ

Powered by Movable Type 4.23-ja