• ベストアンサー

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で書いています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • feininger
  • ベストアンサー率41% (74/180)
回答No.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)
回答No.2

nonchiさんと同意見です。 どうしても毎回フォームで送ることができない場合は、 パスワードの部分を暗号化(復号化する必要がないのでハッシュで十分)して表示するのも手です。 単にパスワードだけのハッシュだと、 万が一、Referrerでアドレスを拾われた場合に入られてしまいますので、 時刻と組み合わせて、例えば5分毎にハッシュを変化させるなどすれば問題ないかと。 (自作掲示板ではそうしてます) クッキーも捨てがたいんですけど・・・

master-3rd
質問者

お礼

回答ありがとうございます。 …ちょっと私には難しそうです。 勉強してみます。

  • nonchi
  • ベストアンサー率43% (16/37)
回答No.1

> また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。 ここで、「**.cgi?pg=10&pw=xxxx」などとパスワードも送ればいいのでは? でも、アドレスに見えるとまずいから、ボタン(フォーム)で送ったほうがいいのかもしれませんね。

master-3rd
質問者

お礼

回答ありがとうございます。 ちょっとやってみます。

関連するQ&A