Walrus,Digit. | 一覧 | 検索 | 更新履歴(RSS) | 新規作成
はてなブックマークに追加 はてなブックマークを表示 編集 | 編集(管理者用) | 差分

Perlメモ/CGI::Application::Plugin::Sessionモジュール

編集

CGI::ApplicationからCGI::Sessionを使用するためのプラグインモジュール CGI::Application::Plugin::Sessionについてのメモ。

ドキュメント

編集

ULoevR Hi! and <a href="http://female-libido-patch-fda.socialgo.com">female libido patch</a> and http://female-libido-patch-fda.socialgo.com female libido patch and 345089 and <a href="http://opticare-ointment-fda.socialgo.com">opticare ointment</a> and http://opticare-ointment-fda.socialgo.com opticare ointment and %-))) and

概要

CGI::Application::Plugin::Sessionモジュールは、CGI::ApplicationモジュールCGI::Sessionモジュールによるセッション管理をするときに、CGI::Sessionオブジェクトの生成、セッションIDのCookieを使った受け渡しなどを簡単に(あるいは自動に)するプラグインモジュールです。

CGI::Applicationを継承するモジュール内で、次のようにCGI::Application::Plugin::Sessionモジュールをuseするだけです。

package MyApp;
use base qw(CGI::Application);
use CGI::Application::Plugin::Session;

以降は、MyAppに追加されるsessionというメソッドを呼ぶと、CGI::Sessionオブジェクトが返されます。MyAppメソッドの大半は、最初に「my $self = shift;」などとするでしょうから、次のように使えます。

sub do_stuff {
  my $self = shift;
  my $session = $self->session;
  ...
}

サンプルコード

CGI::Application::Plugn::Sessionモジュールを使う簡単なサンプルコードです。CGI::Applicationモジュールのプラグインという性格上、サンプル自体もCGI::Applicationを使ったCGIになっています。

サンプルコードは適当なファイル名で保存し、CGIとして設置(先頭行のPerlパスの修正、ASCIIコードでFTP、パーミッションを755など実行権限のあるものにする、などは忘れずに!)して、アクセスして、CGIにアクセスしてみてください。

単純なカウントアップ

以下は、CGI::Application::Plugin::Sessionモジュールを使って、セッションによるカウントアップをしていく例です。 セッション情報の保持などについては、特に設定をしていないのでデフォルト値が使われます。

#!perl

package main;
use CGI::Carp qw(fatalsToBrowser);

my $app = CGI::SessionTest->new;
$app->run;

package CGI::SessionTest;

use strict;
use base qw(CGI::Application);
use CGI::Application::Plugin::Session;
use Data::Dumper;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Sortkeys = 1;

our $VERSION = '0.01';

sub cgiapp_init {
  my $self = shift;
  $self->SUPER::cgiapp_init(@_);
}

sub setup {
  my $self = shift;
  $self->start_mode('s');
  $self->mode_param('mode');
  $self->run_modes(
    's' => \&do_start
  );
}

sub do_start {
  my $self  = shift;
  my $count = $self->session->param('count');
  $count++;
  $self->session->param('count' => $count);
  my $html = "count : $count";
  $html .= $self->query->pre(Dumper($self->session));
  return $html;
};

デフォルト値については、session_configメソッドの説明を見てください。 ただし、ディレクトリはFile::Specモジュールのtmpdirメソッドが返すディレクトリが使われます。例えば、Windowsでは環境変数の変更などをしていなければ、"/tmp"ではなく"C:\temp"が使われます。

セッションデータの使われるディレクトリの指定

セッションデータの保存ディレクトリ指定は、session_configメソッドを使用。CGI::Application::Plugin::Sessionドキュメントによれば、これはcgiapp_init内で実行するのが良いようです。

#!perl

package main;
use CGI::Carp qw(fatalsToBrowser);

my $app = CGI::SessionTest->new;
$app->run;

package CGI::SessionTest;

use strict;
use base qw(CGI::Application);
use CGI::Application::Plugin::Session;
use Data::Dumper;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Sortkeys = 1;

our $VERSION = '0.01';

sub cgiapp_init {
  my $self = shift;
  $self->SUPER::cgiapp_init(@_);
  $self->session_config(
    CGI_SESSION_OPTIONS => [ "driver:File", $self->query, {Directory=>'./session'} ],
    COOKIE_PARAMS       => { -path  => '/', },
    SEND_COOKIE         => 1,
  );
}

sub setup {
  my $self = shift;
  $self->start_mode('s');
  $self->mode_param('mode');
  $self->run_modes(
    's' => \&do_start
  );
}

sub do_start {
  my $self  = shift;
  my $count = $self->session->param('count');
  $count++;
  $self->session->param('count' => $count);
  my $html = "count : $count";
  $html .= $self->query->pre(Dumper($self->session));
  return $html;
};

コメント

[[#rcomment]]