電子書籍の厳選無料作品が豊富!

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

A 回答 (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により強制終了させられることもあります。
この辺はサービスの利用規約やサーバーの仕様書を確認してください。
    • good
    • 0

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

    • good
    • 0

ボタン表示のところでセッションなり、timeなりで一意の値を作成。


データが飛んできたらまずは一意データを調べ、重複が無ければ登録。重複してればエラーを返す。

ボタン連打だけを止めたいのならば10分程度値を持っていれば良いでしょう。


もしくは単純に同一IPは弾くとか。
    • good
    • 0

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