問題 CGI::Sessionモジュールで、セッションを生ファイルに格納している。指定したディレクトリ配下に全てのファイルを格納するのではなく、セッションIDの頭文字を付けた子ディレクトリの下にばらして保存したい。つまり、 /foo/bar/session a07cc22875335fd43b139d7a560687f7.obj 8b82046493d32b808c6ff3b731414fc4.obj ではなく、 /foo/bar/session/a a07cc22875335fd43b139d7a560687f7.obj /foo/bar/session/8 8b82046493d32b808c6ff3b731414fc4.obj のように。 解法 CGI::Session::Driver::fileモジュールのinitおよび_fileメソッドにパッチを当てます。詳細は以下の通りです。
XREAの共用SSLサーバを使ってPerlのCGIを使うとして、これってプロキシになっていて、スクリプト側からすると、非SSL通信になっていますので、$ENV{'REMOTE_ADDR'}は、XREAのサーバのIPアドレスになってしまいます。 CGI::Sessionの-ip_matchに影響が出るので、パッチします。 前提条件として、使っているXREAのCGI::Sessionのバージョンが3.95である事を確認。sshで入って、/usr/bin/less /usr/local/lib/perl5/site_perl/5.8.4/CGI/Session.pm でどうぞ。 バージョン上がるとpatchあてずdieします。4.0系になるとパッチを書き換えないといけないので注意。 #!/usr/bin/perl use strict; use warnings; use CGI::Sessio
■はじめに Perlではセッション管理を簡単にするモジュールとして 1)CGI::Session 2)Apache::Session などがあります。 ここでは、CGI.pmモジュールを使っている人に馴染みやすい、CGI::Session モジュールを使ったセッションパーシステンスの方法を説明します。 ■セッションパーシステンスとは 通常はウェブブラウザでリンクを押すたびに、新しいページにアクセスするので、 例えばオンラインショップの買い物かごに入れた商品情報などは、 過去の情報として保存しておく必要があります。 このために、サーバーの中に、買い物かごの情報を保存して、 必要なときに読み込み/更新をおこなうことができるようにする仕組みが 用意されています。 セッションパーシステンスはこの買い物かごの情報を PCとサーバ間で共有する仕
CGI::Sessionを使ってセッション管理を行っていると、ユーザにブラウザを閉じられるとセッションをdeleteできないので、cgisess_* ファイルがゴミとして残るという問題があります。 期限切れのセッションを探して削除する機能を自分で作らなきゃいけないかなーと思ってたら、ちょうどいいモジュールがありました。 CGI::Session::ExpireSessions 下記の方法で、ゴミとなった cgisess_* ファイルを削除できます。 CGI::Session::ExpireSessions -> new(temp_dir => './tmp', delta => 3600 ) -> expire_file_sessions(); ・60分(3600秒)更新されていない ./tmp ディレクトリ配下の cgisess_* を削除。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く