ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと

ちょっと違うのですが、機能が似ているので掲示板を例にしてお尋ねします。
ユーザモードと管理者モードがあって、例えば、ユーザは新規登録と閲覧だけ、管理者はそれに加えて、削除や編集ができるとします。

問題は、この管理者モードになってから、削除や修正や、色々な機能があるのですが、それを切り替えるたびにモードを引数で渡して自分自身をコールしているのですが、どうも動作が途中で管理者モードから外れてしまいます。

CGIコールをせずに、サブルーチン的に内部で機能を呼べば良いのですが、CGIコールでもうまくいく方法は無いものかと考えています。

簡単に考えれば、管理者として「ログイン中」というフラグを持ちまわることができれば良いと思いますが、それはどうしたら良いでしょう?
変数に入れてもコールするたびに初期化されるし、ファイルに落とすのも芸が無いし・・・
何か良い方法は無いでしょうか?

A 回答 (7件)

グッスリ眠って頭スッキリ。

出ました。(笑)
こんなのでどうでしょう。

if ($login) {
  print "<INPUT TYPE=\"hidden\" NAME=\"login\" VALUE=\"1\">";
}

GET なら
if ($login) {
  print "<A HREF=\"abc.cgi?login=1\">";
} else {
  print "<A HREF=\"abc.cgi\">";
}

これでOKだとおもいますので、ご確認ください。
う~ん、なんて単純な。
    • good
    • 0
この回答へのお礼

すっきりしましたか(笑)
本当に何度もありがとうございます。m(_ _)m
そうですね、やはり、hiddenで渡すしかないですよね?
「if ($login)」の部分もやりたいことはわかりますが、なんとなくもうひとつかな?
でも、一度もログインしてなければhidden渡しも表示されないということで、良いのかな?とも考えます。

色々いただいたアイデアで私なりにやってみます。
ありがとうございました。

お礼日時:2003/02/03 13:56

>れてしまうので、GETを使うメリットというか、必要性を


>理解していないこともあって、POSTしか使ったことが無
>いのです。
私は両方つかいます。POSTだけでは実現が難しいこと
もありますので。もちろん肝心な部分はPOSTにします。

>しかし、管理者ではない人が、ソースを見て予測をつけ
>て、適当に引数を入れたときにログイン後と同じ処理が
>走るのは面白くないなと考えています。
URLに引数を付加した場合は撥ねるので心配はない(適当に
引数を入れたとき = GETで値を与えたの場合 = にログイン
後と同じ処理が走ることは無い)という考えなんですが、
それでは不足ですか?

残る手段として、環境変数を使うというのはどうでしょうか?
    • good
    • 0

読み落としました。



POST と GETは違うはずですよ。
cgi-libを使ってるとあまり意識する必要がないのかも分かりませんが。あまり気にしたことがないので、よく覚えていません。最近 perlは使いませんし。

そのときでも $ENV{'REQUEST_METHOD'}を調べて "GET"だ
ったらフラグを無視すればいいと思います。
全部POSTで作れるかという問題はのこりますけど。
    • good
    • 0
この回答へのお礼

何度も恐れ入ります。( -.-)( _ _)

違いは知っていますが、私はPOSTしか使ったことがありません。
GETでは256bytesしか扱えないことと、URLに引数が表示されてしまうので、GETを使うメリットというか、必要性を理解していないこともあって、POSTしか使ったことが無いのです。

私が恐れているのは、URLとして表示されることではなく、それはログインした管理者に見えてもかまいません。なぜなら、ソースを見れば、どっちみち分かることですから。
しかし、管理者ではない人が、ソースを見て予測をつけて、適当に引数を入れたときにログイン後と同じ処理が走るのは面白くないなと考えています。

ですから、CGIが吐き出した結果のHTMLを見てもログイン後のパラメータがバレないようにしたいのです。

やっぱり、無理かな~?

お礼日時:2003/02/01 21:27

http://xxxx.xxx.jp/cgi-bin/yyyy.cgi?login=1
>などとダイレクトに打ち込むと、認証を完了した画面に
>いきなり行ってしまいます。

そのために、なるべくPOSTでと、お断りしたのですが。
全てをPOSTにするのは不可能ですか?

全部はPOSTに出来ないとなると、『芸が無い』と言われているテンポラリファイルを使わざるを得ないかもしれません。もう少し考えてみますが...
    • good
    • 0

ああ、ホントにそそかしい。

少し訂正します。

パスワード認証が完了した時点で
$login = 1;
のようにログイン済みのフラグを設定しておいて

フォームを使って
<form method="POST" ...
<input type="hidden" name="login" value=$login>
とするか

<a href="Spurbbs.cgi?mode=edit&login=$login>
のようにしてGETで受け取ればログイン中のフラグを持ち回れます。

なるべく POSTをつかった方がいいです。
    • good
    • 0
この回答へのお礼

2回回答いただきましたが、こちらにまとめて書かせていただきます。
その方法はあるのですが、それだと、hiddenにしてもアクセスする時にURLに付ければ認証不要になってしまいます。
つまり、
http://xxxx.xxx.jp/cgi-bin/yyyy.cgi?login=1
などとダイレクトに打ち込むと、認証を完了した画面にいきなり行ってしまいます。
フリーのCGIなどで良く使われる方法だと思うのですが、そこにもう一工夫欲しいなと考えています。
認証後のパラメータ付きでダイレクトにアクセスしても、認証が済んでなければ、認証要求をするようにしたいのですが、無理でしょうか?

お礼日時:2003/02/01 12:53

方法はいろいろありますが、フォームを使って


<form method="POST" ...
<input type="hidden" name="login" value="1">
とするか

<a href=Spurbbs.cgi?mode=edit&login=1>
のようにしてGETで受け取ります。

なるべく POSTをつかった方がいいです。
    • good
    • 0

> 「ログイン中」というフラグを持ちまわる


Cookieを発行してはどうでしょう?
http://tohoho.wakusei.ne.jp/wwwcook.htm

参考URL:http://tohoho.wakusei.ne.jp/wwwcook.htm
    • good
    • 0
この回答へのお礼

それも考えたのですが、少ないとは思いますがcookieをoffにしている場合もあるし、それを考えると汎用性がどうかな?とも思います。

案の1つではありますね。
ありがとうございました。

お礼日時:2003/02/01 12:48

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