• 締切済み

パスワードの連携について

今作っているシステムについて助言をいただきたいです。 年度.htm→checker.cgi→upload.cgiと連携している3つのファイルがあります。事前にユーザーとパスワードを登録しておくcgiがあり、年度.htmでユーザーを、checker.cgiでパスワードを入力します。パスワードが一致すればupload.cgiにジャンプします。そして、また、年度.htmに戻ります。 そこで、不便なのが、何回もファイルを提出しようとすると、この動作を何回も繰り返すことになることです。そこで、checker.cgiのパスワードを1回の入力で、あとはユーザーの選択のみでこのサイクルをしたいと考えています。 私は、cheker.cgiを1と2に分けて、また、パスワードファイル(.pas)を別のフォルダにも書き出し、条件式でcheker1と2を判断するプログラムを試してみましたが、できませんでした。 何かよい方法は考えられますか??パスワード認証をするcheker.cgiのソースを載せますので、教えていただきたいと思います。 よろしくお願いします。 #!/usr/bin/perl # CGI::Carpモジュールを使ってエラーをブラウザに表示する use CGI::Carp qw(fatalsToBrowser); use CGI qw(:standard); #require 'module/jcode.pl'; #「jcode.pl」を読み込む # FORMから得た情報を整理 local( $pair, $buffer ); if ( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); }else{ $buffer = $ENV{'QUERY_STRING'}; } local( @pairs ) = split( /&/, $buffer ); foreach $pair ( @pairs ) { local( $name, $value ) = split( /=/, $pair ); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack( "C", hex($1) )/eg; # &jcode'convert(*value, 'sjis'); # "jcode.pl"で日本語をデコード $FORM{$name} = $value; } $nendo = $FORM{'nendo'}; $jiki = $FORM{'jiki'}; $kamoku = $FORM{'kamoku'}; $gkseki = $FORM{'target'}; @tmp = split /\//, $gkseki; $target = $tmp[0]; $gname = $tmp[1]; # HTML出力 print <<"HTML1"; content-type: text/html <html lang="ja"> <head><title>$kamoku レポート</title></head> <body bgcolor="#CCFFFF"> <center><br> <h3><font face="HGP創英角ポップ体" color="#0000FF" size="5"> $nendo年度 $jiki &nbsp&nbsp $kamoku</font></h3><br> <font face="HGP創英角ポップ体" color=black size="4"> $target <!--$gname--> さん<br><br><br> ”レポート提出”,”ホームページ提出”,”提出確認・成績確認”<br> のいずれかを選択してください。</font> <br><br> <form action="upandview.cgi" method="post"> <input type=hidden name=nendo value="$nendo"> <input type=hidden name=jiki value="$jiki"> <input type=hidden name=kamoku value="$kamoku"> <input type=hidden name=target value="$target"> <input type=hidden name=gname value="$gname"> <b> <input type=radio name=work value=1 checked>レポート提出  <input type=radio name=work value=3>ホームページ提出  <input type=radio name=work value=2>提出確認・成績確認 <br></b><br><br> <font face="HGP創英角ポップ体" color=black size="4"> 次に,パスワードを半角英数字で記入して下さい。 <br><font size=3> 最初に記入するパスワードが登録されます。<br> 忘れないように,メモを取るなどして下さい。<br> 後でパスワードを変更する際にも必要です。</font></font><br><br> <input type=password name=passwd> <br><br><hr><br> <input type=submit value="次に進む"> </form> </center></body></html> HTML1 exit;

みんなの回答

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.1

>何かよい方法は考えられますか?? 真っ先に考えるのが、ログイン・ログアウト機能を持たせる事です。 パスワードに有効期限を持たせておいて、それをログインの代わりにするのもアリだと思います。 >事前にユーザーとパスワードを登録しておくcgiがあり ということからも、非現実的な案でもないと思います。 このcgiを少し改造すればいいだけですので・・・ 1.年度.htmにアクセスする前の段階でログインをしてもらっていれば、ログインしている間はパスワードが適用されるようにする。 2.ログインすると、そのユーザーとログイン時間を記録したログインファイルを作っておく。 3.checker.cgiの起動時にそのユーザーに対応したログインファイルを探す。 4.ログインファイルが無ければ(もしくは規定の時間が過ぎていれば)パスワードを要求し、 あればログイン時間をチェックしてパスワードの入力をしたことにする(そのままupload.cgiに飛ばせばいいですね)。 5.ログアウトしたらログインファイルを消す。もしくは、4.で規定の時間が過ぎていた場合も消す。 こんな感じで実装すればいいかと思います。 パスワードファイルにログイン時間を含めてしまえばパスワードファイルにログインファイルの機能を持たせることになり もっとシンプルになりますが、普通は別にしておいたほうがいいと思います。 3.で探す時にあるかないかで判断できるのが大きいですし 4.でchecker.cgiを経由した時にログイン時間を再記録して、ログインの有効期限を延ばしたりということを考えると あまりパスワードファイルに機能を持たせる事は得策で無いからです。 (ファイルの書き込みが失敗する可能性も考慮しないといけない)

nsdai20
質問者

お礼

ご意見ありがとうございます。そういった方法があるんですね! アドバイス通りやってみます!また、アドバイスのほうよろしくお願いします。

関連するQ&A