我正在尝试保存用户注册时来自的站点。现在,我的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
然后,在创建用户时,它会检查此会话变量并将其设置为nil。有时这不起作用,我担心在使用session时可能会发生一些意想不到的事情。有谁有更好的办法吗?或者是一些输入?
编辑:这是我用来保存referer的逻辑:
def create
@user = User.new(params[:user])
if @user.save_with(session[:referer])
....
end
用户
def save_with(referer)
self.referer = referer unless referer == "null"
self.save
end
有没有什么原因不应该这样做呢?
发布于 2010-03-09 10:17:40
def save_referer
session['referer'] = request.env["HTTP_REFERER"] || 'none' unless session['referer'] && !is_logged_in?
end
漂亮;-)
发布于 2015-04-25 21:17:21
Jonathan:当使用会话时,答案是有效的。如果你不想要更好的信息,你也应该使用cookies。用户可以通过一个链接访问你的站点(有一个推荐人),然后离开一天,然后直接返回你的站点(现在没有推荐人)。最好也将信息保存到cookie中,格式如下
def save_referer
if cookies[:referer].blank?
cookies.permanent[:referer] = request.env["HTTP_REFERER"] || 'none'
end
end
还有一个gem https://github.com/holli/referer_tracking可以帮助自动处理这些跟踪和其他跟踪。
https://stackoverflow.com/questions/2341879
复制相似问题