目次
PHP王国にPerl爺も溶け込みたい
何がしたいかと申しますと、
最近はWordPressもそうなんですが、ポータル的なサイト、イントラネットでもそうなんですが、PHPがメインなんですよね。PHPでできたトップページにログインして、PHPでセッション管理しながら推移していく、みたいな感じで。
そんなPHP王国的なサイトでも、問題なくPerlで作ったプログラムも動きますが、ちゃんとPHPセッションを引き継いで、更新して、またPHP王国側にお返ししないと、サイトの一貫性というか、王国に溶け込めないなぁと思いまして、PHPのセッションファイルをPerlで読み込むサブルーチンを考えてみました。
PHPセッション設定、情報の確認
セッション名の確認とセッションファイルの保存場所をPHP.iniを見て確認をしておきます(またはphpinfo()で表示してみる)
1 2 3 4 5 6 7 8 |
・・・・・ [session] session.name PHPSESSID session.save_path /var/lib/php/session ・・・・・ |
上の設定ですと、
セッション名は、「PHPSESSID」
ファイルの保存場所は、「/var/lib/php/session」となります。
PHPのセッションが、ログイン画面等で以下のような感じで始まっていたとします
1 2 3 4 5 6 |
・・・・・ <?php session_start(); $_SESSION['userid'] = $_REQUEST['userid']; ?> ・・・・・ |
「userid」というセッション変数名を使っていることを確認しておきます
これらの情報をもとにして作ってみます
PHPセッションを確認するPerlのサブルーチン
さて、どんな動きをさせようかと考えました
まずは、PerlプログラムはGETで[userid]の引数をもらいつつ、
例:/perlprogram.cgi?userid=$_SESSION[‘userid’]
セッション名(PHPSESSID)のCookieを取得します
Cookieからセッションファイル名を特定して、引数で受け取った[userid]と、セッションファイルに記録されている[userid]とを比較して、一致していたら継続、セッションファイルがなかったり、[userid]が一致しなかったら、ログインページにリダイレクトするなどの、合否(1,0)判定をする。
セッションファイルを見ただけだと、だぶんセッション継続時間延長がされずに、セッション切れが突然起こる可能性があるので、忘れずにセッションファイルの更新もしておく。
[userid]の比較が必要かどうかはかなり不明ですが、そんなサブルーチンにしてみました。
イケてなかったらすみません。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
use CGI; use PHP::Session; my $session_flag = 0; #1と0で合否判定します # useridを受け取る my $q = new CGI; $userid= $q->param('userid'); # セッション名のクッキーを取得 my $cookie = $q->cookie('PHPSESSID'); # サーバーに保存されたセッションファイル my $session_dir = '/var/lib/php/session/'; my $session_file = "$session_dir"."sess_"."$cookie"; # セッションファイルがあれば、useridを確認 if(-f $session_file){ my $session = PHP::Session->new($cookie, {save_path => $session_dir}); my $session_userid = $session->get('userid'); # 渡されたuseridとセッションファイルのuseridが一致すれば1 if($session_userid == $userid){ $session_flag = 1; $session->save; # セッションファイルの更新 } } return($session_flag); |