如何?同一IP提交表單的次數限制?

來源:互聯網
上載者:User
關鍵字 php
如何?同一IP提交表單的次數限制?
比如說:我開發了一個投票程式,要求同一IP在兩個小時內只能投一次票(即成功提交一次)。該如何寫代碼?
(初學者,問題可能有些白癡,請耐心回答,謝謝)

回複內容:

如何?同一IP提交表單的次數限制?
比如說:我開發了一個投票程式,要求同一IP在兩個小時內只能投一次票(即成功提交一次)。該如何寫代碼?
(初學者,問題可能有些白癡,請耐心回答,謝謝)

關注公眾號:phpgod(PHP技術大全),每日精彩分享不間斷。
第一步,建立表,DDL如下:
CREATE TABLE ip_limit (
id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
ip char(16) NOT NULL DEFAULT '0' COMMENT 'ip地址',
form_id int(11) NOT NULL DEFAULT '0' COMMENT '表單id',
last_submit_time int(11) NOT NULL DEFAULT '0' COMMENT '上次提交表單時間',
success_submit_times int(11) NOT NULL DEFAULT '0' COMMENT '成功提交次數',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二步,需求邏輯,描述如下:
當使用者進行第一次提交時,插入一條記錄到ip_limit表,並記住ip,form_id,last_submit_time,success_submit_times等欄位資訊,當使用者進行更多次提交時,先查詢對應ip對於指定form_id的last_submit_time,如果current_time - last_submit_time>2*3600,就更新last_submit_time,success_submit_times欄位資訊,否則提示相關限制資訊。

儲存到redis,設定生存周期為2小時
鍵為ip,值為訪問次數。
每次投票檢查次數,超過返回錯誤,未超過限制就允許投票,並把次數加一

緩衝到檔案
session
redis等記憶體資料庫
MySQL等SQL資料庫

都可以實現

各有優劣,速度,效率,看如何取捨。當然也要看服務的精確性。

如果用client的javascript來限制提交次數的話也不可靠,如果有人直接改javascript的話就可以繞過這個限制。
可以從服務端的request裡面可以拿到用戶端的ip地址,然後你就知道怎麼做了,不過這種方法對於某些客戶使用代理上網的話就有問題了。

使用緩衝去檢測

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.