• 締切済み

cgiでのユーザーIDとパスワードの認証

パスワードの確認しかないcgiにユーザーIDの認証も追加したいのですが、どのように変更すれば良いのかわかりません。皆さんのアドバイスよろしくお願いします。 ※ユーザーID $text = 'test' # パスワードの確認 if ($formdata{'pass'} eq $password or $cookies{'pass'} eq $password) { $access = $upload = $delete = 1; $cookie = "Set-cookie: pass=$password\n"; } elsif ($formdata{'pass'} or $cookies{'pass'}) { $form_log .= "パスワードが正しくありません。<br>"; }

みんなの回答

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.4

えっと、私が仕切るのも何ですが、もし認証に関しては期待通りの動作として問題がないようでしたら一度質問を締め切って、補足分に書かれた質問は別に上げるようにしてもらえますでしょうか。 #このOKWeb(Goo?)の正しい使い方として...(笑) 今度は質問はプログラミングの Perlに投稿してくださいね。

chirorin001
質問者

お礼

そうですね。再度質問しますね。 いろいろとありがとうございました。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.3

ちょっと情報が少なすぎますね。 いくつか確認します。 ・パスワードだけの時は期待した動作をしていたのですね? ・クッキーは正しく格納されていますか?(パソコン上) ・また、id/pass比較前までに期待したクッキーの値が変数に読み込まれていますか? ・クッキーの保存期間は?(プログラム上及びブラウザ上)

chirorin001
質問者

お礼

こんなおバカに付き合ってもらってありがとうございます。 >パスワードだけの時は期待した動作をしていたのですね? パスワードだけのときはちゃんと動いてました。 最初に書いたパスワードの確認のソースがはじめにかかれていたものです。 >クッキーは正しく格納されていますか?(パソコン上) >また、id/pass比較前までに期待したクッキーの値が変数 に読み込まれていますか? >クッキーの保存期間は?(プログラム上及びブラウザ上) すいません。調べたのですがわかりませんでした。 多分パスワードの確認のところでつまずいているような感じがします。 ソースはこんな感じになっています。 http://219.168.92.41/file/WalRack.txt いろいろ言ってすいません。よろしくお願いします。

chirorin001
質問者

補足

すいません。 今確認したところ当初からIEを閉じたらログインし直す設定でした。お騒がせしました。 あと、どうしてもわからない問題があります。 このcgiはファイルをアップロードとダウンロードすることが出来るcgiです。 それで、日本語名のついたファイルをアップロードするときは文字化けもなく保存できるのですが、そのファイルをダウンロードすると日本語が文字化けしてダウンロードされてしまいます。アップロードした時点で Fileというフォルダに格納されるのですが、そのときはまだ文字化けはしていません。 ダウンロードするファイルを選択した時点で文字化けしたアドレスがIEの下に表示されます。そして、その文字化けの文字のままファイル名となってダウンロードされてきます。 ご指導よろしくお願いいたします。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

パスワードを $cookie変数に入れるとき、idの方が上書きされているせいだと思います。  $cookie .= "Set-cookie: pass=$password\n"; と繋いであげれば良いのではないでしょうか。

chirorin001
質問者

お礼

ありがとうございます。何とかできるようになりました。 またまた質問なのです。IEの画面を更新してもログイン画面に戻らなくなって一安心と思っていたら今度は、IEのブラウザを閉じ再度開くとクッキーがあるはずなのにログイン画面が表示されてしまいます。ご指導よろしくお願いいたします。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

まず、この質問はカテゴリが違いますね。プログラミングのカテゴリでご質問されると沢山の回答が着くと思います。 各ユーザーIDとパスワードを関連づける仕組みを作り、入力された(またはcookieと)一つずつループで比較して IDとパスワードが一致したら認証OKということです。 Perlですとこんな感じです(cookieは省略)。 %passwd = (  'user1' => 'pw001',  'user2' => 'pw002' }; foreach $userid (keys %passwd) {  if ($userid eq $formdata{'userid'}) {   if ($passwd{$userid} eq $formdata{'pass'}) {    認証OK    last;   }  } }

chirorin001
質問者

お礼

お返事ありがとうございます。 すいません初心者で頭も悪いものですから、もう少し詳しく教えていただけないでしょうか。 ユーザーが1人だけの場合、自分なりに考えてみました。 # パスワードの確認 my $password = 'test';  my $text = 'test'; と定義した場合。 if ($formdata{'id'} eq $text or $cookies{'id'} eq $text){ $cookie = "Set-cookie: id=$text\n"; if ($formdata{'pass'} eq $password or $cookies{'pass'} eq $password) { $access = $upload = $delete = 1; $cookie = "Set-cookie: pass=$password\n"; } elsif ($formdata{'pass'} or $cookies{'pass'}) { $form_log .= "パスワードが正しくありません。<br>"; } } elsif ($formdata{'id'} or $cookies{'id'}) { $form_log .= "ユーザーIDが正しくありません。<br>"; } これだとログインできるけどなんか変。 それにログイン後、ブラウザの更新するとまたログイン画面に戻ってしまいます。 多分クッキーか$access = $upload = $delete = 1; がうまくいってないのかな? すいませんよろしくお願いします。