我试图找到一种方法来防止用户重复提交我的表单。我有禁用submit按钮的javascript,但是仍然有一个偶然的用户找到了双重提交的方法。
我设想了一个可重用的库,我可以创建这个库来保护它。
在我理想的库中,代码块将如下所示:
try:
with acquire_lock({'field1':'abc', 'field2':'def'}) as lock:
response = #do some credit card processing
lock.response = response
except SubmissionWasDuplicate, e:
response = e.response
锁表应该是这样的:
duplicate_submission_locks
有人知道这是否已经存在吗?写起来似乎并不难,所以如果它不存在,我可以自己写。
老实说,您的最佳选择(简单而良好的实践)是向“感谢”页面发出HTTPRedirect(),如果“感谢”页面与表单相同,那就没问题。你还可以这么做。
可以使用会话存储哈希
使用这种方法(不删除会话cookie),用户不能在会话过期时重新存储数据,顺便说一句,我假设存在一个标识发送数据的用户的东西
解决这个问题的一个简单方法是为每个表单添加一个唯一的散列。然后你可以有一个当前表单的滚动表。提交表单或哈希值太旧时,可以将其从表中过期,并拒绝表中没有匹配哈希值的任何表单。
正如前面提到的,HTTPRedirect是正确的方法。
不幸的是,即使Django自己的内置管理也容易出现与此问题相关的问题。在某些情况下,跨站点脚本框架可以帮助防止其中的某些情况,但我担心当前的生产版本没有内置此功能。
相关问题 更多 >
编程相关推荐