Rails项目防止表单重复提交

类似struts的token,使用session保存token,调用check_token后就把session里的token清掉,所以不能重复调用。

因为有些界面可能会有多个表单,这些表单最好共用同一个token,不然提交过来的token很难验证,所以这里做了处理,不会多次生成。


module ApplicationHelper
def token_field
hidden_field_tag(:__token__, (@__token__ ||= (session[:__token__] =
Digest::SHA1.hexdigest((Time.now.to_i + rand(0xffffff)).to_s)[0..39])))
end
end



class ApplicationController < ActionController::Base
def check_token
if session[:__token__] == params[:__token__]
session[:__token__] = nil
session.update
return true
end
false
end
end


[code]
<%= form_tag(:controller => "test", :action => "test") %>
<%= token_field %>
<%= submit_tag "提交" %>
</form>
[/code]

检查token:

#方法1:
class TestController < ApplicationController
def test
unless check_token
return redirect_to("/")
end
#...
end
end

#方法2:
class TestController < ApplicationController
before_filter :check_token, : only => ["test"], : redirect_to => "/"

def test
#...
end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值