Как сохранить http ссылающийся домен в направляющих

Я пытаюсь сохранить сайт, что пользователь произошел из того, когда они подписываются. Прямо сейчас у меня есть before_filter в моем ApplicationController:

before_filter :save_referer

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

Затем, когда пользователь создается, это проверяет эту переменную сеанса и устанавливает его на ноль. Иногда это не работает, и я волнуюсь, что могли бы быть некоторые непреднамеренные вещи, происходящие с использованием сессии как это. У кого-либо есть лучший путь? Или некоторый вход, возможно?

Править: Это - логика, которую я использую для сохранения ссылающегося домена:

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

Есть ли какая-либо причина, почему это не должно работать?

16
задан Eimantas 6 July 2010 в 13:00
поделиться

2 ответа

Я думаю, что в вашем подходе есть изъян. Пока пользователь посещает страницы и не вошел в систему, код фильтра будет выполняться. Таким образом, единственный способ session ['referer'] будет не равным нулю, это если они перейдут прямо на страницу регистрации, где они (предположительно) разместят свои данные для входа, и вы проверите переменную сеанса .

Думаю, вам, вероятно, нужно проверить реферер только один раз - для этого вам придется изменить код фильтра.

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

Теперь, когда вы хотите узнать, какой у них референт, это будет либо действительный URL-адрес, либо «нет». Обратите внимание, что, поскольку он находится в сеансе, он не идеален: они могут перейти на другой URL-адрес и вернуться, и сеанс все еще будет действительным.

21
ответ дан 30 November 2019 в 21:53
поделиться
def save_referer
  session['referer'] = request.env["HTTP_REFERER"] || 'none' unless session['referer'] && !is_logged_in?
end

красиво; -)

2
ответ дан 30 November 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: