![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ちょっと違うのですが、機能が似ているので掲示板を例にしてお尋ねします。
ユーザモードと管理者モードがあって、例えば、ユーザは新規登録と閲覧だけ、管理者はそれに加えて、削除や編集ができるとします。
問題は、この管理者モードになってから、削除や修正や、色々な機能があるのですが、それを切り替えるたびにモードを引数で渡して自分自身をコールしているのですが、どうも動作が途中で管理者モードから外れてしまいます。
CGIコールをせずに、サブルーチン的に内部で機能を呼べば良いのですが、CGIコールでもうまくいく方法は無いものかと考えています。
簡単に考えれば、管理者として「ログイン中」というフラグを持ちまわることができれば良いと思いますが、それはどうしたら良いでしょう?
変数に入れてもコールするたびに初期化されるし、ファイルに落とすのも芸が無いし・・・
何か良い方法は無いでしょうか?
No.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だとおもいますので、ご確認ください。
う~ん、なんて単純な。
すっきりしましたか(笑)
本当に何度もありがとうございます。m(_ _)m
そうですね、やはり、hiddenで渡すしかないですよね?
「if ($login)」の部分もやりたいことはわかりますが、なんとなくもうひとつかな?
でも、一度もログインしてなければhidden渡しも表示されないということで、良いのかな?とも考えます。
色々いただいたアイデアで私なりにやってみます。
ありがとうございました。
No.6
- 回答日時:
>れてしまうので、GETを使うメリットというか、必要性を
>理解していないこともあって、POSTしか使ったことが無
>いのです。
私は両方つかいます。POSTだけでは実現が難しいこと
もありますので。もちろん肝心な部分はPOSTにします。
>しかし、管理者ではない人が、ソースを見て予測をつけ
>て、適当に引数を入れたときにログイン後と同じ処理が
>走るのは面白くないなと考えています。
URLに引数を付加した場合は撥ねるので心配はない(適当に
引数を入れたとき = GETで値を与えたの場合 = にログイン
後と同じ処理が走ることは無い)という考えなんですが、
それでは不足ですか?
残る手段として、環境変数を使うというのはどうでしょうか?
No.5
- 回答日時:
読み落としました。
POST と GETは違うはずですよ。
cgi-libを使ってるとあまり意識する必要がないのかも分かりませんが。あまり気にしたことがないので、よく覚えていません。最近 perlは使いませんし。
そのときでも $ENV{'REQUEST_METHOD'}を調べて "GET"だ
ったらフラグを無視すればいいと思います。
全部POSTで作れるかという問題はのこりますけど。
何度も恐れ入ります。( -.-)( _ _)
違いは知っていますが、私はPOSTしか使ったことがありません。
GETでは256bytesしか扱えないことと、URLに引数が表示されてしまうので、GETを使うメリットというか、必要性を理解していないこともあって、POSTしか使ったことが無いのです。
私が恐れているのは、URLとして表示されることではなく、それはログインした管理者に見えてもかまいません。なぜなら、ソースを見れば、どっちみち分かることですから。
しかし、管理者ではない人が、ソースを見て予測をつけて、適当に引数を入れたときにログイン後と同じ処理が走るのは面白くないなと考えています。
ですから、CGIが吐き出した結果のHTMLを見てもログイン後のパラメータがバレないようにしたいのです。
やっぱり、無理かな~?
No.4
- 回答日時:
>
http://xxxx.xxx.jp/cgi-bin/yyyy.cgi?login=1>などとダイレクトに打ち込むと、認証を完了した画面に
>いきなり行ってしまいます。
そのために、なるべくPOSTでと、お断りしたのですが。
全てをPOSTにするのは不可能ですか?
全部はPOSTに出来ないとなると、『芸が無い』と言われているテンポラリファイルを使わざるを得ないかもしれません。もう少し考えてみますが...
No.3
- 回答日時:
ああ、ホントにそそかしい。
少し訂正します。パスワード認証が完了した時点で
$login = 1;
のようにログイン済みのフラグを設定しておいて
フォームを使って
<form method="POST" ...
<input type="hidden" name="login" value=$login>
とするか
<a href="Spurbbs.cgi?mode=edit&login=$login>
のようにしてGETで受け取ればログイン中のフラグを持ち回れます。
なるべく POSTをつかった方がいいです。
2回回答いただきましたが、こちらにまとめて書かせていただきます。
その方法はあるのですが、それだと、hiddenにしてもアクセスする時にURLに付ければ認証不要になってしまいます。
つまり、
http://xxxx.xxx.jp/cgi-bin/yyyy.cgi?login=1
などとダイレクトに打ち込むと、認証を完了した画面にいきなり行ってしまいます。
フリーのCGIなどで良く使われる方法だと思うのですが、そこにもう一工夫欲しいなと考えています。
認証後のパラメータ付きでダイレクトにアクセスしても、認証が済んでなければ、認証要求をするようにしたいのですが、無理でしょうか?
No.2
- 回答日時:
方法はいろいろありますが、フォームを使って
<form method="POST" ...
<input type="hidden" name="login" value="1">
とするか
<a href=Spurbbs.cgi?mode=edit&login=1>
のようにしてGETで受け取ります。
なるべく POSTをつかった方がいいです。
No.1
- 回答日時:
> 「ログイン中」というフラグを持ちまわる
Cookieを発行してはどうでしょう?
http://tohoho.wakusei.ne.jp/wwwcook.htm
参考URL:http://tohoho.wakusei.ne.jp/wwwcook.htm
それも考えたのですが、少ないとは思いますがcookieをoffにしている場合もあるし、それを考えると汎用性がどうかな?とも思います。
案の1つではありますね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイナリファイルのアップロード
-
自CGIのURLのパス部分を取得す...
-
リンクをクリックした時に別ペ...
-
Perlで書いたページが表示されない
-
use CGI
-
エクセルで相対パスの書き方を...
-
エクセルで毎月第2週日の水曜日...
-
毎○曜日って、使いますか?
-
日本語問題 昨日は何曜日ですか...
-
ユーザー定義の(aaa)
-
apacheでPerl CGIが作動せず、5...
-
リストコントロールの列幅を固...
-
アンケートなどの1日1回の投...
-
よくある 『 第○(1・2・3・4・...
-
週2回のペースって だいたい何...
-
社外からのアクセスかどうか判...
-
月の第一週とは
-
[Excel] ある日の曜日が当月の"...
-
クライアントのIPとマシン名を...
-
エクセルで 自動的に◯や数字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jcode.plが読み込めない
-
cgiとplとpm
-
Quantifier follows nothing in...
-
require文が実行できない
-
Perlソースを2つのファイルに分...
-
htmlからテキストを返すperlを...
-
perlのrequireの動き方について...
-
自CGIのURLのパス部分を取得す...
-
cgiからcgiをコールする。
-
バイナリファイルのアップロード
-
Perlのデバッグ方法って。。。...
-
Location: で cgi → c...
-
Perlccを使ったCGIプログラムの...
-
Perlから他のcgiへPOSTでデータ...
-
動作中のCGIのソースを公開したい
-
useとrequireでエラー
-
ソースコードがそのまま表示さ...
-
webからroot権限のコマンドを実...
-
perlのcgiで、変数の中身を表示...
-
mt-check.cgiでForbiddenエラー...
おすすめ情報