• 締切済み

JAVASCRIPT禁止でのボタン&リンク制御について

C言語、CGIでボタン制御について教えて下さい。  (apacheを使用してます。JAVA SCRIPTは、使用禁止です。) CGI画面からボタンを連続で3回押下した場合に 最初の1回目、または、3回目のPOSTだけを有効にしたい場合 どうすればできますか?アドバイスください。 下記の方法は自分なりに方法を考えました。  (1)セッション管理     1 CGI全てのPOST、GET指定に、       セッションID(ユニーク)を付加させる。         ID+time     問題点:        いつセッションIDの生成するのか?、        いつセッションIDをチェックするのか?、        いつセッションIDを削除するのか?        自分自身わかっていません。  (2)セマフォ制御     CGIのmain関数の開始と終了で排他制御をする。     問題点:セマフォ制御をCGI自身にしていいものなのか?      URL:セッション管理 http://memo.blogdns.net/session.html

  • CGI
  • 回答数3
  • ありがとう数1

みんなの回答

回答No.3

セッションも一種のデータベースですから、セッションIDに関連づければどんなデータでも保存できます。 関連づけたデータの方にアクセス時刻やアクセス回数を保持しておきます。 > 1 CGI全てのPOST、GET指定に、 >   セッションID(ユニーク)を付加させる。 >    ID+time IDがユニークなはずですから(でなきゃ「ID」じゃない)、timeは不要では? よくユニークにするためにtimeを付加することがあると思いますが、 サーバーへのアクセスは、2人のクライアントが同時にアクセスすることもあるので、 ユニークな文字列が作れなければ、IPアドレス+timeでIDにできます。 > いつセッションIDの生成するのか?、 最初にアクセスしたとき。 セッションIDが存在しなければ、それが1回目のアクセスと言うこと。 > いつセッションIDをチェックするのか?、 アクセスしたとき。 > いつセッションIDを削除するのか? 任意。 自分(CGIアプリケーション制作者)が不要と判断したとき。 たとえば、このくらいの時期が過ぎれば古すぎて使えないデータになるだろう、という期間。 > 最初の1回目、または、3回目のPOSTだけを有効にしたい場合 3回目のアクセスを有効期限としても良し、4回目以降のアクセスを全て無効にするなら数日とか数年とか。 ただし、ネカフェから別の人が1時間後にアクセスすることもありますので、IPアドレスで管理するなら、有効期限の調整は結構考えさせられます。 > (2)セマフォ制御 何時、何人がアクセスしてくるかわからないセッション管理にセマフォは無駄、 有効期限が1年なら、その1年間、メモリが使いっぱなしになります。 ホスティングサービスを利用すれば、間違いなく過負荷によるアカウント剥奪ですね。 通常はファイルに保存して管理します。 また、forkによって起動したアプリケーションも一定時間でOSにより強制終了させられることもあります。 この辺はサービスの利用規約やサーバーの仕様書を確認してください。

  • is907
  • ベストアンサー率55% (5/9)
回答No.2

自分なら、アクセス元の IP アドレスと、ポストされたデータのハッシュなどを持っておき、カウンタで判断します。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

ボタン表示のところでセッションなり、timeなりで一意の値を作成。 データが飛んできたらまずは一意データを調べ、重複が無ければ登録。重複してればエラーを返す。 ボタン連打だけを止めたいのならば10分程度値を持っていれば良いでしょう。 もしくは単純に同一IPは弾くとか。

関連するQ&A

  • 閉じるボタン「×」を制御したい

    PHPを使って作業している者です。 windowの閉じるボタンが押された場合、イベントを起こす方法はありませんか? どうしたいのかを具体的にいいますと、 ユーザーのログイン、ログアウトの情報をPHPを介してMysqlのデータベースで管理しています。 閉じるボタン「×」を押した場合、データベース内にあるユーザー情報を削除したいのです。 ログアウトボタンを押されずに退席し、データベース上にユーザー情報が残ったままになってしまうことを避けたいのです。 javascriptを併用してもかまわないので何とかならないでしょうか? 排他制御の一環として今回の質問内容を模索しているので、もっと別で効率のいい方法が有るとは思いますが、排他ロックをいまいち理解できないためデータベース上にユーザー情報の有無で制御してしまおう考えてのことです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションIDについて

    セッションIDについて ASP.NETで開発しています。 セッションフィクセーション対策でログイン画面で初期表示のみセッションを削除しています。 「ログイン」ボタンを押して、Postbackされる時にセッションIDが再発行されます。 ここまでの流れはいいのですが、もう一度「ログイン」ボタンを押下すると 一回目の「ログイン」ボタン押下時に再発行したセッションIDが、二回目の「ログイン」ボタン 押下時にも再発行してしまいます。 私は一回目のPostback時にセッションIDが再発行されたら、 それ以降のPostback時は既存のセッションIDを使用する動きを予想していました。 なぜ二回目以降のPostback時にもセッションIDが再発行されてしまうのでしょうか? ご存知の方がいましたら教えていただけないでしょうか。

  • 排他制御の方法

    現在、PWS+ASP+ACCESSを使用し開発を行っていますが排他制御で悩んでいます。 ASPは、ステートレスなセッションでの制御しか出来ないため、ページを表示後のデータの変更はスタンドアロンでの更新のような形になってしまうと思います。 以下のような方法で行っている実例を見たことがありますが、少なからず問題も抱えていると思います。 ・レコード毎に排他フラグを保持する ~ 処理がアベンドした場合にフラグが残る(一定時間後に解除という方法もありますが) ・レコード毎に更新時間を持ち、読込時の更新時間と更新時の更新時間とを比較し更新されていない時だけ更新をかける ~ 後に更新をかけようとした変更が無駄になる 上記の方法以外で、排他制御を実現させる良い方法はないのでしょうか。他の方法で実現しているときは、その方法を教えて頂けませんでしょうか。 ※PWS→IIS、ACCESS→SQLServerに変更する可能性はあります。 (セッションオブジェクト・アプリケーションオブジェクト等を使用しての実現方法など) 宜しくお願いします。

  • Perl-CGI で排他制御はどうすればよいのか?

    このカテゴリでは始めて質問します。 今 Perl-CGI でアクセス・カウンタを自作しようとしています。 今まではレンタルしたカウンタを使っていましたが複数のページで 個別に使えないため自作することを決めました。 そこで質問です。 アクセス・カウンタで重要な排他制御はどのように行いますか? 今ネット検索で見つけたものがディレクトリを作成しておく方法です。 これ以外に何か上手いやり方はありますか? Perl は入門したばかりです。 どうぞよろしくお願いいたします。 排他制御で気をつけるべき点がありましたら一緒に教えて下さい。 それでは回答をお待ちしています。

    • ベストアンサー
    • Perl
  • セッション使用で戻るボタンが利用不可

    IDやパスワードで読み込んだ後、 こちらのサイトの様に 色々な権限や処理があるのですが、 ブラウザ(IE)の戻るボタンを押すと 「ページが表示できません」ページになります。 各ページにIDやパスワードの セッションを保持しているのですが、 回避策はありますでしょうか。 自分でページ移動ボタンも作成してありますが、 やはり戻るボタン押下出来るようになりたいです。

    • ベストアンサー
    • PHP
  • セマフォについて

    UNIXの装置内で、複数プロセスからの同時アクセス を排他する為にセマフォを使用するのですが、聞いた所 によると、セマフォを使用してロック中のプロセスが異 常終了した場合は、そのセマフォでロックした状態から 開放されないと聞きました。systmemVはロックしたまま で、posixは色々制御出来るかも・・・。と聞きました。 ロックを解除する方法があるものでしょうか?。又、そ のロックを解除する方法について、何らかの情報を教え て頂けますでしょうか?。

  • PerlモジュールのCGI::Sessionでセッション管理

    PerlモジュールのCGI::Sessionでセッション管理をしようとしています。 具体的なコードは %cookie=raw_fetch CGI::Cookie; $S_id=$cookie{'S_id'};#クッキーに保存されたセッションIDを取得 $session = new CGI::Session("driver:MySQL", "$S_id", {Handle=>$dbh}); その後 $Ses_id=$session->id(); とすると本来ならばクッキーに保存された既存のセッションID($S_id)が$Ses_idに入ると思うのですが、$Ses_idには新しいセッションIDが入ってしまいます。 そこで疑問なのですが (1)$S_idにクッキーに保存されたセッションIDを指定すると既存のセッションをオープンするのではないのでしょうか? (2)$Ses_id=$session->id();にはなぜ新しいセッションIDが入ってしまうのでしょうか? 2点の質問ですが、どうか宜しく教えてくださいまし。

  • ラジオボタンをsessionで使いたい

    sessionのソースコードについて教えてください。 テキストボックスに記入されたデータは、下記のソースコードで取り出せるのですが、 ラジオボタンを使用して、選択されたボタンに指定された「value」を取り出したいのですが、sessionの記述が解りません。 session_start(); if($_POST['data']!=""){ $_SESSION['year']=$_POST['year']; } print "<FORM action=\"sample.php\" method=\"post\"> <INPUT size=\"10\" type=\"text\" name=\"year\" value=\"{$_SESSION['year']}\">\n"; print "<input type=\"submit\" name=\"data\" valu=\"表示 \"></FORM>\n"; 宜しくご教示お願い致します。

    • 締切済み
    • PHP
  • cookieを介さずにCGI/PerlとセッションIDを遣り取りする方

    cookieを介さずにCGI/PerlとセッションIDを遣り取りする方法 Adobe AIR HTML/Ajax で cookieを介さずにサーバーのCGI/PerlとセッションIDを遣り取りする方法について、何か情報ありませんでしょうか。 AIRはcookieをOSと共有するようなのですが、既定ブラウザがFirefoxの場合、共有できません。 幸い、AIRはローカルでのファイル操作が可能なので、自前でセッションIDの遣り取りと管理をさせたいと考えております。 で、以下の様にしてみましたが、nullが返ってくるだけでした。 PerlのセッションID発行はCGI::Sessionを使用しています。 [code] var cgi_url = 'http://server_name/cgi/session.pl'; var login_name = 'hoge'; var login_auth = 'fuga'; var msg = $.ajax( { type :'POST', url :cgi_url, data :'login_name=' + login_name + '&login_auth=' + login_auth }).responseText; alert(msg); [/code]

  • Perlでのセッション管理と不要セッション削除について

    いつもお世話になっています。 Perlにてセッション管理(ログインして、サイト内はユーザーIDなどを持ちまわるような)を行おうとしています。 CGI::Sessionを使用して実現できると思っているのですが、 疑問があります。 セッション情報の持ち方は、サーバー内にファイルか、DBに格納する ことになると思いますが、不要になったファイルやレコードは、 みなさんどうされているのでしょうか? (ログアウトボタンがあっても、ブラウザの閉じるボタンを押される ケースが多いと思いますので、必ずdelete()はできないですよね?) 削除バッチなどで定期的に削除することを考えていますが、 もっとスマートなやり方があればご教示いただければと思います。 よろしくおねがいします。

専門家に質問してみよう