ruby-on-rails - 如何在rails中保存http引用

标签 ruby-on-rails session http-referer

我正在尝试保存用户注册时来自的网站。现在我的 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

然后,当创建用户时,它会检查此 session 变量并将其设置为 nil。有时这不起作用,我担心使用这样的 session 可能会发生一些意想不到的事情。有没有人有更好的方法?或者一些输入?

编辑:这是我用来保存引用的逻辑:
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

有什么理由不应该这样做吗?

最佳答案

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

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

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

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

关于ruby-on-rails - 如何在rails中保存http引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2341879/

相关文章:

ruby-on-rails - 如何在 Amazon OpsWorks 上为 Rails 应用程序运行 Redis?

ruby-on-rails - 有没有一种很好的方法来检查一个字符串是否至少包含一个字符串数组中的一个字符串?

java - Hibernate 单向关联问题

asp.net-mvc - ASP.Net MVC 应用程序注销未完全注销

asp.net - 获取 ASP.NET 中 Referer 页面的 URL

ruby-on-rails - 有没有办法在 Ruby 中清除 "invalid byte sequence in UTF-8"错误的文件?

ruby-on-rails - 如何防止加载 RSpec 助手

security - 为什么浏览器接受通过非安全 (HTTP) 连接发送的安全 cookie?

php - 如何在 PHP 中获取完整的引荐来源网址

PHP:如何检测外部访问者的直接请求?