リダイレクトとクッキー
- 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を送信する
- 受信スクリプト側であれやこれやする。
- リダイレクトで別のページにJump(すでにパラメータ不要)
- リダイレクト先のURLにリダイレクトで最初にPOSTで送信したパラメータがばっちり表示
こんな感じ
http://sample/sample.pl?login_id=someone&login_pw=somepw&Submit=ログイン
POSTで送信した意味ないじゃん。リダイレクトする前に何とかしなきゃってんで以下。
- リダイレクトする前にパラメータを削除する
$FORM->delete_all(); #保持しているパラメータを全部削除 $FORM->delete('login_pw'); #パラメータを指定して削除
上記をヘッダに何か書き込む前(上記の場合redirectの前)に実行する。