【问题标题】:How to save http referer in rails如何在rails中保存http引用
【发布时间】:2011-01-21 11:06:31
【问题描述】:

我正在尝试保存用户注册时来自的网站。现在我的 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。有时这不起作用,我担心使用这样的会话可能会发生一些意想不到的事情。有没有人有更好的方法?或者一些输入?

编辑:这是我用来保存引用的逻辑:

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

这有什么不可行的原因吗?

【问题讨论】:

  • “有时,这不起作用”
  • 这是在 Rails 3 中偶然出现的吗?
  • 另外,您介意发布您正在工作的代码吗?如,您是否消除了上述所有内容 - 包括 create 操作中的内容,并将其全部替换为应用程序控制器中接受的答案中的代码?比如你还在用save_with(referer)这个方法吗?我正在尝试做同样的事情,所以很想知道你是如何解决这个问题的,如果你这样做了。谢谢。

标签: ruby-on-rails session http-referer


【解决方案1】:

我认为您的方法存在缺陷。只要用户正在点击页面并且没有登录,过滤器代码就会运行。所以session['referer']不会为零的唯一方法是,如果他们直接进入他们(可能)发布登录信息的注册页面并检查会话变量。

我认为您可能只需要检查一次引用 - 为此您必须修改过滤器代码。

def save_referer
  unless is_logged_in?
    unless session['referer']
      session['referer'] = request.env["HTTP_REFERER"] || 'none'
    end
  end
end

现在,当您想知道他们的引荐来源网址是什么时,它要么是有效的网址,要么是“无”。请注意,由于它在会话中,因此并不完美:他们可以转到另一个 url 并返回,会话仍然有效。

【讨论】:

  • 好的,谢谢你的帮助。我考虑过陈旧的会话问题,但不知道该怎么做。这似乎是其他人会解决的问题,但我没有看到任何关于它的博客或其他在线信息。
  • 他如何检索引用以在其他地方使用?他是否必须将session['referer'] 保存到数据库中的User 模型中,然后在需要时像User.referer 一样检索它?
【解决方案2】:
def save_referer
  session['referer'] = request.env["HTTP_REFERER"] || 'none' unless session['referer'] && !is_logged_in?
end

美丽 ;-)

【讨论】:

  • 不错。除非is_logged_in,否则不应该这样吗?虽然而不是!is_logged_in?如果他们没有登录,我只想保存推荐人。
【解决方案3】:

乔纳森:s answer在使用会话时有效。如果您不想要更好的信息,您还应该使用 cookie。用户可以从一个链接(有推荐人)访问您的网站,然后离开一天并再次直接返回您的网站(现在没有推荐人)。最好将信息也保存到以下样式的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 可以帮助自动处理这些和其他跟踪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多