Rails项目防止表单重复提交

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

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

Ruby代码   收藏代码
  1. module ApplicationHelper  
  2.   def token_field  
  3.     hidden_field_tag(:__token__, (@__token__ ||= (session[:__token__] =   
  4.         Digest::SHA1.hexdigest((Time.now.to_i + rand(0xffffff)).to_s)[0..39])))  
  5.   end  
  6. end  


Ruby代码   收藏代码
  1. class ApplicationController < ActionController::Base  
  2.   def check_token  
  3.     if session[:__token__] == params[:__token__]  
  4.       session[:__token__] = nil  
  5.       session.update  
  6.       return true  
  7.     end  
  8.     false  
  9.   end  
  10. end  


Java代码   收藏代码
  1. <%= form_tag(:controller => "test", :action => "test") %>  
  2.   <%= token_field %>  
  3.   <%= submit_tag "提交" %>  
  4. </form>  


检查token: 
Ruby代码   收藏代码
  1. #方法1:  
  2. class TestController < ApplicationController  
  3.   def test  
  4.     unless check_token  
  5.       return redirect_to("/")  
  6.     end  
  7.     #...  
  8.   end  
  9. end  
  10.   
  11. #方法2:  
  12. class TestController < ApplicationController  
  13.   before_filter :check_token, : only => ["test"], : redirect_to => "/"  
  14.   
  15.   def test  
  16.     #...  
  17.   end  
  18. end  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值