簡體   English   中英

PHP - 這是防止重新提交的好方法嗎?

[英]PHP - Is this a good method to prevent re-submission?

這與阻止webform重新提交有關 ,但這次上下文是基於Web的RPG。 在玩家擊敗怪物后,它會掉落一個物品。 所以我想阻止用戶點擊后退按鈕,或者保持刷新,以“欺騙”項目丟棄。

由於項目丟棄頻繁,使用DB存儲唯一的“drop-transaction-id”對我來說似乎是不可行的。 我在下面招攬一個想法:

  1. 對於每次戰斗,根據當前日期時間,用戶ID創建唯一值,並將其存儲到數據庫和會話中。 給定用戶標識可能會返回值

  2. 如果會話中的值存在於DB中,則“戰斗”有效並允許用戶訪問與戰斗相關的所有頁面。 如果它在DB中不存在,則啟動新的戰斗狀態

  3. 戰斗結束后,從DB中清除唯一值。

  4. 清除DB中30分鍾的值。

歡迎對此方法提出任何意見,改進或陷阱

這個問題非常主觀,你可以做或不做的事情取決於它周圍已有的數據/框架。

您提供的解決方案應該可以使用,但這取決於您可用的唯一戰斗/戰利品/用戶數據。

我認為這是你認為最好的嗎? 這是我認為最好的:)

  1. 獲取userID以及該戰斗中的唯一數據。 戰斗開始時間,戰斗結束時間等等
  2. 將其存儲在數據庫或您擁有的存儲系統中
  3. 收集戰利品后,刪除該記錄

這樣,如果那個userID和那個獨特的戰斗數據存在,他們就沒有得到他們的戰利品。

而你是對的; 跟蹤每塊戰利品太多了,你最好暫時存儲數據。

似乎是一種合理的方法。 我假設你存儲的事實是玩家無論如何都在戰斗中。 否則,他們可以關閉他們的瀏覽器,如果他們想避免戰斗?

戰斗結束和戰利品掉落應被視為一種不正常的行動。 如果沒有戰斗,就不會有任何掉落的戰利品。

這取決於你的游戲設計:你更傾向於roguelikes的方向,只有轉數,因此在兩次移動之間的長時間停頓肯定是可能的(比如通過聊天室咨詢其他人,注意:在NetHack中不被認為是作弊)? 用戶只能在某些地點或任何地方保存游戲嗎? 這在設計上產生了巨大的差異,例如,為類似於Thorarin提到的漏洞做出讓步。

如果你的游戲只進行了一次拯救的傳統roguelike路線,轉動地下室和permadeath,那么就可以為任何給定角色保存當前轉彎的數量以及任何與游戲相關的信息(庫存,地圖,敵人及其狀態) ),然后在播放器的任何動作中檢查,以防止轉彎兩次。

或者你可以在客戶端javascript中捆綁所有內容,這樣即使他們確實重新提交了表單,也會產生一個全新的戰斗/寶藏遭遇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM