今回はHTML::Templateを使って、簡単な認証プログラムをかきました。
ID/PWに guest/guestと入力してログインボタンをクリックすれば、ログイン後のhtmlページを表示します。
enter.tmpl
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> </head> <body> <div align="center"> <form action="login.cgi" method="post"> <b>認証</b></br> ID : <input type="text" name="id" ><br><br> PW : <input type="password" name="pw" ><br><br> <div align="center"> <input type="submit" name="login" value="ログイン"> </div> </form> </body> </html> |
login.cgi
#!/usr/bin/perl # モジュール宣言 use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); use HTML::Template; # ユーザのID/PW my %user = ( "guest" => "guest" ); # CGIオブジェクトの生成 my $cgi = new CGI(); # ログイン処理 if ($cgi->param('login')) { &login; } &enter_form; #--------------------------------------------------------------------- # ログイン認証 sub login { # idのパラメータ取得 my $id = $cgi->param('id'); # pwのパラメータ取得 my $pw = $cgi->param('pw'); # id/pwがguest/guestならば、test.htmlを表示 if ($id eq "guest" and $pw eq "guest") { print "Content-type: text/html\n"; print "Location: ./test.html\n\n"; } } # HTML::Templateを使用してログイン画面表示 sub enter_form { # HTML::Templateオブジェクトを作成 my $tmpl = HTML::Template->new(filename => 'enter.tmpl'); # HTMLの出力 print "Content-type: text/html\n\n"; print $tmpl->output; } |
今回は同ディレクトリに、HTMLテンプレートとCGIスクリプトを実装しましたが、テンプレートファイルはWebクライアントが直接アクセスできないディレクトリに配置するのが普通みたいです。
それと、CGIスクリプトの中にID/PWを記述するのではなく、隠しファイル等を使って、Webクライアントがアクセスできないディレクトリに配置しておかないとダメです。
0 件のコメント:
コメントを投稿