- ベストアンサー
IF文でページ振り分けがうまく出来てない。
CGI勉強中です。 ある掲示板CGIを改造して会員のみに使用可にしようと考えています。パスワード自体は無事組み込むことが出来たのですが、1つ問題が出ました。 掲示板なので、過去ログがありますよね。その過去ログページを表示しようとするとまた認証ページに戻ってしまい、パスワードを再度入力→最新10件のページに戻ってしまいます。どうにかして、1度入ったらパスワードを入力しなくてもいいようにしたいのですが… 今のところこうなってます。 /////////////// if ($pass_mode == '1'){ ←もしパスを使用するだったら if ($F{'mode'} eq '') { &pass_mode} ←モード無しの場合、パス入力画面に移動 if ($F{'mode'} eq 'admin') { &admin} ←モードアドミニならsub adminへ } else{ if ($F{'mode'} eq '') { &main_form} ←メイン書き込みページへ else { &{$F{'mode'}} } } /////// となっています。 また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。 この状態で、ページ移動時にパス入力ページに移動しないようにするにはどうしたらいいでしょうか?cookieを使う必要があったりしますか? 抜けてる情報・足りない情報があったら指摘してください。すぐ補足します。言語はperlで書いています。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「ハッシュ」と書くとなにやら難しそうですが、要は元のパスワードを判らなくしてしまえばいいので、$hash('pass')とやって常に4が返る(passが4文字だから)だけでもハッシュになります。 文字列を入れると1~6ケタの数字を返す簡単なハッシュなら↓のようになります。 (全角スペースいれてますのでご注意を) sub hash { my ($str) = @_; my $max = length($str); my $hash = 0; my $count = 0; while ($count < $max) { $hash = ($hash + ord(substr($str, $count, 1))) * 56911; $hash = (int($hash / 100)) % 1000000; $count++; } return ($hash); }
その他の回答 (2)
- feininger
- ベストアンサー率41% (74/180)
nonchiさんと同意見です。 どうしても毎回フォームで送ることができない場合は、 パスワードの部分を暗号化(復号化する必要がないのでハッシュで十分)して表示するのも手です。 単にパスワードだけのハッシュだと、 万が一、Referrerでアドレスを拾われた場合に入られてしまいますので、 時刻と組み合わせて、例えば5分毎にハッシュを変化させるなどすれば問題ないかと。 (自作掲示板ではそうしてます) クッキーも捨てがたいんですけど・・・
- nonchi
- ベストアンサー率43% (16/37)
> また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。 ここで、「**.cgi?pg=10&pw=xxxx」などとパスワードも送ればいいのでは? でも、アドレスに見えるとまずいから、ボタン(フォーム)で送ったほうがいいのかもしれませんね。
お礼
回答ありがとうございます。 ちょっとやってみます。
お礼
回答ありがとうございます。 …ちょっと私には難しそうです。 勉強してみます。