Ten*_*ack 16 http-referer session ruby-on-rails
我正在尝试保存用户在注册时来自的网站.现在我的ApplicationController中有一个before_filter:
before_filter :save_referer
def save_referer
unless is_logged_in?
session['referer'] = request.env["HTTP_REFERER"] unless session['referer']
end
end
Run Code Online (Sandbox Code Playgroud)
然后,当创建用户时,它会检查此会话变量并将其设置为nil.有时这不起作用,我担心使用像这样的会话可能会发生一些意想不到的事情.有没有人有更好的方法?或者也许是一些输入?
编辑:这是我用来保存引用者的逻辑:
def create
@user = User.new(params[:user])
if @user.save_with(session[:referer])
....
end
Run Code Online (Sandbox Code Playgroud)
用户
def save_with(referer)
self.referer = referer unless referer == "null"
self.save
end
Run Code Online (Sandbox Code Playgroud)
有什么理由不起作用吗?
Jon*_*ian 21
我认为你的方法存在缺陷.只要用户正在点击页面并且未登录,过滤器代码就会运行.所以唯一的办法session['referer']会不会是零,如果他们直接进入注册页面,他们(大概)发布他们的登录信息和您检查会议变种.
我想你可能只需要检查一次referer - 要做到这一点你必须修改你的过滤器代码.
def save_referer
unless is_logged_in?
unless session['referer']
session['referer'] = request.env["HTTP_REFERER"] || 'none'
end
end
end
Run Code Online (Sandbox Code Playgroud)
现在,当你想知道他们的引用者是什么时,它将是一个有效的网址或"无".请注意,由于它在会话中,它并不完美:它们可以转到另一个URL并返回,会话仍然有效.
| 归档时间: |
|
| 查看次数: |
16980 次 |
| 最近记录: |