激凹みから立ち直る方法

パスワードの確認しかない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>";
}

A 回答 (4件)

パスワードを $cookie変数に入れるとき、idの方が上書きされているせいだと思います。


 $cookie .= "Set-cookie: pass=$password\n";
と繋いであげれば良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/07 20:42

えっと、私が仕切るのも何ですが、もし認証に関しては期待通りの動作として問題がないようでしたら一度質問を締め切って、補足分に書かれた質問は別に上げるようにしてもらえますでしょうか。


#このOKWeb(Goo?)の正しい使い方として...(笑)
今度は質問はプログラミングの Perlに投稿してくださいね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/08 09:14

ちょっと情報が少なすぎますね。


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

この回答への補足

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

補足日時:2004/09/07 23:33
    • good
    • 0
この回答へのお礼

こんなおバカに付き合ってもらってありがとうございます。
>パスワードだけの時は期待した動作をしていたのですね?

パスワードだけのときはちゃんと動いてました。
最初に書いたパスワードの確認のソースがはじめにかかれていたものです。

>クッキーは正しく格納されていますか?(パソコン上)
>また、id/pass比較前までに期待したクッキーの値が変数 に読み込まれていますか?
>クッキーの保存期間は?(プログラム上及びブラウザ上)

すいません。調べたのですがわかりませんでした。
多分パスワードの確認のところでつまずいているような感じがします。

ソースはこんな感じになっています。
http://219.168.92.41/file/WalRack.txt
いろいろ言ってすいません。よろしくお願いします。

お礼日時:2004/09/07 22:35

まず、この質問はカテゴリが違いますね。

プログラミングのカテゴリでご質問されると沢山の回答が着くと思います。

各ユーザー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;
  }
 }
}
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
すいません初心者で頭も悪いものですから、もう少し詳しく教えていただけないでしょうか。
ユーザーが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;
がうまくいってないのかな?
すいませんよろしくお願いします。

お礼日時:2004/09/07 16:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!