• ベストアンサー

連投防止

投票機能を作ったのですが、同一人物からの連投を防ぐにはクッキーで防ぐしかないのでしょうか? 他に連投を防ぐ方法があれば教えてください。 ログイン機能以外でお願いします。

  • PHP
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.2

$_SERVER['REMOTE_ADDR'] こいつが、投稿時の相手のアドレスなので、 連投用のデータベースに ipaddr varchar 3文字x4回+カンマが3回=15文字が最大=ナルを入れて16文字 agent varchar 256とか→HTTP_USER_AGENTを入れておく箱 create_at datetime default current_timestamp;→又はnow() ipaddrをUNIQUE+INDEX指定(衝突させるため) で、投稿時に insert on dup でなければ追加あれば、更新でよいかと。 でcreate_atに例えば3分以内却下したいなら、 DATE_ADDとかに(create_at, INTERVAL 3 MINUTE); (直接加算してもOKだけど、一応・・・) これを、その範囲をSELECTして、 now()以下判定で、引っかからなければ3分以内に 同じIPはいないと判定。 いた場合は、ブラウザエージェントと比較。 同じネットワークでたまたま別の人が同じサイトに 投稿した時の為に、IP以外の要素を入れておくことで、 少しだけ制限をゆるくしている。 で、3分なのであれば、逆に言えば3分以上たったレコードは 消しても構わないので、定期的にクリーナーでもcronで 回せば実質永久に使えるでしょうね。 データベース的なゴミが嫌いなのであれば、 MySQLの特定のテーブルだけをRAMに作り、 memcached内に実体を置くなど。 これで連投防止用データがDISKを荒らすのを防げるでしょう。 なので、逆にinsert on dup のカラムに count int deault 0などにしておいて、 または、insert側にcount=0でコミット。 dup側にcount=count+1とか入れておけば、 ついでに、荒そうと粘った数も自動的に入って 便利ですよ! では、よい一日を~

dhtfyjh
質問者

お礼

なるほど、ありがとうございます。

その他の回答 (1)

回答No.1

クッキーは、逆に使えないですよ。 PHPなら、相手のIPアドレスが、$_SERVERに含まれてるので、 同じIPからを一定時間受け付けないようにする方が マシかと思います。 一度、 print_r( $_SERVER ); で、どんなものを受け取っているか?で 見てみるとよいかと!

関連するQ&A

  • 間違って連投してしまいます。

    間違って回答、質問を連投してしまいます。 ご迷惑をおかけしたくないので、 自分で消したいのですがどうすればいいですか? まだ、利用方法についてよく理解していません。 とても丁寧に扱ってもらえるのでそれに答えられる利用者になりたいのです。

  • 特定カテゴリでしつこく似たような質問を連投する人物がいてイヤになってい

    特定カテゴリでしつこく似たような質問を連投する人物がいてイヤになっています。最近はIDの脇に画像まで付け出したのでそのカテゴリにはその画像が並んでいます。 ブロックユーザーとは回答者になれなくする機能と思っていますが、質問自体を見えなくする機能はないでしょうか? このユーザーは規約に違反しているとは言いがたいので運営には報告していません。

  • 変数名の自動生成(投票の多重投稿防止)

    投票システムを作っていますが、多重投稿を防ぐためにクッキーに値を保存しようと考えました。(それほど厳密な多重投稿防止ではないので) 投票するアイテムが複数あり、1番目のアイテムに投票した場合は、同じアイテムには連続して投稿はできないけれど、他のアイテムには投票できると、要するに投票されたアイテムもクッキーに保存しておきたいのです。 今、 setcookie("ABC","vote".$id."=1",time()+90*24*60*60); として、id1に投票した場合はvote1という変数に1が保存されるようになっています。 で、2番目、3番目のアイテムに投票された場合や、投票時にすでに投票されているかどうかチェックするときにクッキーの情報を呼び出すわけですが、変数名自体を自動生成させるのはどうすればいいのでしょうか。 例えば、id1に投票があったかどうかチェックする場合に if(isset($ABC)){ parse_str($ABC); if(isset("$vote".$id)){ ・・・ とは書けないですよね? 変数名自体を作る方法を教えてください。 また、このような状態で多重投稿を防ぎたい場合に、もっと簡単な方法はないでしょうか。 (クッキーを使わない方法でも結構です) あわせて教えて頂けると嬉しいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • sleipnir:クッキーの設定

    sleipnirブラウザのクッキーの設定方法について教えていただけないでしょうか。セキュリティメニューの中にクッキーIE6、クッキー、セッション毎のクッキーの3つがありますが、その違いが分かりません(クッキーIE6はインターネットオプションの設定と同じだと思うのですが、これとそれ以外の2つとの関係がわかりません)。クッキーの設定を有効にしないとログインできないページに対して、クッキーIE6で「すべてをブロック」にすると、他の2つの設定に関わらずログインすることができず、逆に「すべて許可」等にすると他の2つの設定に関わらずログインに失敗することがありません。クッキー、またはセッション毎のクッキーを選択することで、クッキーを有効にしたり無効にしたりできるのかと思ったのですがそうではないのでしょうか。初歩的な質問で申し訳ありませんが、ご存知でしたら教えていただけないでしょうか。

  • この回答は参考になった投票方法

    「この回答は参考になった」に投票できるようになりましたが、単純に「教えてgoo」を開いて見ている状態では、投票に参加できませんようね。今日初めてマイページから入って操作すると機能するようなので質問です。「ログイン」とはマイページにログインで一度入ってから、閲覧を参照して、投票せよと言うことでしょうか・・、要は投票権は会員に限定するという優越権が与えられていると言うことでしょうか。単純に開いて閲覧回答に「納得」で投票する機能はないのでしょうか・・・。またはやり方を教えてください。

  • gooブログのログインクッキーを消す方法

    gooブログのログインクッキーを消す方法を探しています。 ログイン画面にいつまでもIDとパスワードが自動で入力される状態で出てきており、共有パソコンなので困っています。 パソコン内のクッキーをすべて消去する方法はわかるのですが、他のクッキーが消えてしまるのも困るので、gooブログのみのクッキーを消去したいと思います。 試してみた方法は・・・ 『ツール』→『インターネットオプション』→閲覧の履歴の『設定』→『ファイルの表示』 ここで表示されたファイルの中で目ぼしいものを消してみたのですが、ログインのクッキーはまだ消えません。 ここで表示されるファイルの中のどのファイルを消せばいいのか、または、他に方法をご存知の方がいらっしゃいましたら教えていただけると本当に助かります。 何卒どうぞよろしくお願いいたします。

  • PHPで回数制限をつけた投票プログラムの作成

    PHPで簡易的な投票プログラムを用いたサイトを作成しています。 様々な投稿に対し、 Facebookのいいね!やtwitterのRTのように、 それぞれに投票できるようなプログラムを作成しました。 具体的には以下の通りです。 ・会員登録機能のあるサイトだが、ゲストでも投票ができる ・1つの記事につき、1人1日1回まで投票可 ・ゲスト状態とログイン状態を使い分ければ2ユーザーと捉え、1日2回分投票可 ・ログイン状態の場合、DBにIDと記事番号と投票日のログを残す ・ゲスト状態の場合、ゲストIDを発行し、セッション変数に保存、DBにゲストIDと記事番号と投票日のログを残す ここで問題となるのが、 ゲストIDの発行が、クッキーを削除してしまえば何度でもできてしまうため、クッキーを削除することでゲストの場合、何回でも投票できてしまうという点です。 このままゆるい制限でもいいのかなーとも思ったのですが、 やはり厳密にしておかねば、 サーバーへの負荷にもなりかねないと思い、 何か良い手はないかと質問させて頂きました。 ゲストログ保存用のテーブルのみ、IPを保存し、IPで制限するというのも考えたのですが、 複数PCで同一IPを使用しているゲストの場合に動作が厳密すぎて投票ができなくなりかねない気がします。 何か良い手はないでしょうか? 補足ですが、PHPで作られているかはわかりませんが、 「stampers」というLINEスタンプの投票サイトのLOVEボタンが、 クッキーを削除してもログが残っており、且つ、 同一IPの別のパソコンから投票する場合はきちんと初回として処理されているので、 同じようにできればきちんと識別できたら良いなと思っています。 ご回答、よろしくお願いします。

    • 締切済み
    • PHP
  • Cokieのインポートについて

     Windows7でIE9を使っています。  私は、PCの知識を基本からは学んでいないので、雑多なノウハウを断片的に知っているだけなのですが、その中のひとつに、「クッキーのエクスポートとインポート」があります。  「お気に入り」に登録しているウェブサイトの中に、IDとパスワードを入力してログインするサイトが十数件あります。一度ログインすれば、IEの機能なのか、Windowsの機能なのか、またはクッキーの機能なのか、よく分かりませんが、二度目以降は、そのサイトにアクセスすればすでにログイン状態になっていて、あらためてパスワードなどを入力する必要はないようになっています。  この状態で、昨年11月に、クッキーをエクスポートして、クッキーのバックアップファイルを作っておきました。  そうすると、PCに、「Cクリーナー」をかけて、一時ファイルやクッキーなどを清掃すると、「お気に入り」に登録したウェブサイトは未ログイン状態に戻りますから、ここで、エクスポートしておいたクッキーのバックアップファイルからインポートすると、それらのウェブサイトはすべてログイン状態に復旧するということになります。  以上のような状況で、この半年あまりやってきました。(「Cクリーナー」は週1回くらいかけていました)。  しかし、今日、いつものように、「Cクリーナー」をかけた後、クッキーをインポートしたのですが、どういうわけか、「お気に入り」に登録のウェブサイトが、ログイン状態には戻らなくなってしまったのです。何度、インポートしても、「インポート完了」の表示は出るのですが、十数件のウェブサイトがログイン状態には、以前のようには戻らなくなってしまったのです。  もともと、そういうものなら仕方ありませんが、以前は出来ていたことが、今回になって、急に出来なくなったということは、何か、他に原因があるのではないかと思い、皆さんのアドバイスを受けたいと思い、質問させていただきました。  よろしくお願いいたします。

  • 再び、他のクッキーを再利用する方法

    先日同一サイトのクッキー利用について ご回答いただいたばかりなのですが、 再度お願いがございます。 以下のログイン画面で   クッキー書き込み   http://www.****.co.jp/xxx/nn/logon.asp   エクスプローラでクッキーファイルをみると   [ログイン名]@nn[1].txt   が作成できていました。 しかし以下のメインメニューで   http://www.****.co.jp/mm/mein.asp   最初のクッキー情報([ログイン名]@nn[1].txt)   を読み込みたいのですがどうしても読めません。   ログインは同一の人物です。   初心者なのでできましたらソースを頂けると   助かります。 最初のログイン画面は市販のプログラムなので クッキー情報を書く場所が変更できません。 どうしても最初のログイン画面でのクッキー情報 を利用したいのですが.....。 あと出来ましたら以下のクッキー情報の『1111』のみ を取得したいのですが       ([ログイン名]@nn[1].txt の内容 )     Login     50:20:1111     www.****.co.jp/xxx/nn/     1536     2865430528     30124157     1441232768     29663592   読み込み方がよく分かりません。 お手数をお掛け致しますが宜しくお願い致します。

  • Firefoxのパスワードの保存は危険か

    Windows VistaでFirefox3.0を使用しています。 ログインが必要なサイトをよく利用していて、手間を省くためにFirefoxにID、パスワードを記憶し、Secure Login(opera風のログインができる)という拡張機能を使ってログインしています。 プライバシー情報の保存されているパスワード以外は、インターネットを終わる時などにこまめに消去してしまっているので頻繁に使用しています。 これは危険でしょうか? パスワードは保存せず手打ちで、クッキーを消さずにログインを維持…の方が良いのでしょうか。 (パスワードは手打ち、クッキーなどはこまめに消去が一番安全なのでしょうけれど) お返事よろしくお願いします。

専門家に質問してみよう