by Hippo2000(2000/8/9)
CGI::Persistentモジュールなのです。Apache::Sessionと同じような働きをするものです。
原本の著作権はVipul Ved Prakash氏がお持ちです。詳しくは作者をご覧ください。
内容等が間違っていたら修正します。ご連絡ください。
CGI::Persistent -- CGIアプリケーションのためのトランスペアレントな状態永続化
use CGI::Persistent;
my $cgi = new CGI::Persistent "/directory";
print $cgi->header ();
my $url = $cgi->state_url ();
print "<a href=$u>I am a persistent CGI session.</a>";
HTTPはステートレスなプロトコルです;HTTPサーバはオブジェクトを提供した後、接続をクローズします。リクエストの詳細の記憶は何も残しません。そして、すでに提供したものとその後のリクエストとを関連付けません。これはHTMLページやイメージ要素のような静的なリソースではうまく機能しますが、複雑なユーザ対話はしばしば複数のリクエストとWeb資源の異なる部分をまたがって、状態を保存することを要求します。
ステートレスなサーバでのステートフルはNetscapeクッキーのようなクライアント側の機能(これは一般的なプライバシーの原則からはいやなものだと考えられます)か、あるいはフォームでのヒドゥンフィールドとURLでのvalue属性の組によって実現されています。状態を保持したURLがより好まれます。というのも、クライアントの設定に依存しないからです。しかしアプリケーションが複雑さを増大させるので非現実的なものになりがちです。
CGI::Persistent はこの問題を、サーバ側に状態情報を格納する永続的なCGIセッションを導入することにより解決します。新しいセッションが始まると、CGI::Persistentは自動的にユニークな状態識別文字列を生成し、サーバ上の永続オブジェクトに関連付けます。特定のセッションを参照するように状態識別文字列はURLまたはフォーム使われます。リクエスト属性はトランスペアレントに関連付けられたオブジェクトにコミットされ、オブジェクトデータは問い合わせに結び付けられます。
CGI::Persistent はCGI.pmから派生しています。CGI.pmメソッドは適切にオーバーライドされています。ほんの少しの新しいメソッドが追加されています。
new() は問い合わせから取得する変わりに、引数のリストでも状態識別子を取ることが出来ます。このモジュールを異なるセッションをまたがって残したい構成データを格納するために使っているのであれば便利かもしれません。
例:
$q = new CGI::Persistent; $q = new CGI::Persistent "/dope"; $q = new CGI::Persistent undef, "/dope/924910985.134";
重要な注意:属性は明示的にdelete()されなければ、あなたに付きまとうでしょう。クリアが必要な制御属性や他のコンテキストに依存するフィールドをクリアすることを忘れないでください。CGI/delete()をご覧下さい。
添付したCGI例、roach.cgiは複数ページの入力フォームを実装することにより、このモジュールの機能を表しています。
CGI(3), Persistence::Object::Simple(3)
Vipul Ved Prakash, mail@vipul.net
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。