リダイレクトとクッキー

  • CGI.pmを使う
use CGI;
$FORM = new CGI;
  • クッキーを発行
my $cookie_id = $FORM->cookie(-name=>'login_id', -value=>$FORM->param("login_id"));
my $cookie_pw = $FORM->cookie(-name=>'login_pw', -value=>$FORM->param("login_pw"));
print $FORM->redirect(-cookie => [$cookie_id, $cookie_pw]);	#クッキー発行
  • 指定のページにリダイレクト
print $FORM->redirect(-url => "./test.pl");
  • リダイレクトとクッキーの発行の同時実行するには

上記の通り。CGI::headerで引数-cookieで発行してもいいが、リダイレクトとの合わせ技の場合、cookieにうまく書き込めないことが多い(出来ないと、とはどこにも書いてないけど・・・)。

  • POSTパラメータの問題

前にPOSTで送信したパラメータがリダイレクトによりURLに全部表示される

  • POSTで上記login_id,login_pwを送信する
  1. 受信スクリプト側であれやこれやする。
  2. リダイレクトで別のページにJump(すでにパラメータ不要)
  3. リダイレクト先のURLにリダイレクトで最初にPOSTで送信したパラメータがばっちり表示

こんな感じ

http://sample/sample.pl?login_id=someone&login_pw=somepw&Submit=ログイン

POSTで送信した意味ないじゃん。リダイレクトする前に何とかしなきゃってんで以下。

  • リダイレクトする前にパラメータを削除する
$FORM->delete_all(); #保持しているパラメータを全部削除
$FORM->delete('login_pw'); #パラメータを指定して削除

上記をヘッダに何か書き込む前(上記の場合redirectの前)に実行する。