ruby-on-rails session http-referer

ruby on rails - Cómo guardar el referer http en los rieles



ruby-on-rails session (3)

Estoy intentando guardar el sitio del que proviene un usuario cuando se registran. Ahora mismo tengo un before_filter en mi ApplicationController:

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

Luego, cuando se crea un usuario, comprueba esta variable de sesión y la establece en cero. A veces esto no funciona y me preocupa que puedan ocurrir algunas cosas inesperadas con el uso de una sesión como esta. ¿Alguien tiene una mejor manera? ¿O alguna entrada tal vez?

EDITAR: Esta es la lógica que estoy usando para guardar el referente:

def create @user = User.new(params[:user]) if @user.save_with(session[:referer]) .... end

Usuario

def save_with(referer) self.referer = referer unless referer == "null" self.save end

¿Hay alguna razón por la que esto no debería funcionar?


Creo que hay un defecto en su enfoque. Mientras el usuario esté golpeando las páginas y no haya iniciado sesión, se ejecutará el código del filtro. Por lo tanto, la única manera de que la session[''referer''] no sea ​​nula es si van directamente a la página de registro donde (presumiblemente) publican su información de inicio de sesión y usted verifica la var. De sesión.

Creo que probablemente solo necesite consultar el referente una vez, para ello tendrá que modificar el código del filtro.

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

Ahora, cuando quiera saber cuál es su referente, será una URL válida o "ninguna". Tenga en cuenta que, dado que está en la sesión, no es perfecto: podrían ir a otra URL y volver, y la sesión seguirá siendo válida.


Jonathan: La respuesta de s funciona cuando se usan sesiones. En caso de que no disponga de mejor información, también debe utilizar cookies. El usuario puede visitar su sitio desde un enlace (con un referente) y luego irse por un día y volver directamente a su sitio (ahora sin un referente). Sería mejor guardar información también en una cookie en el siguiente estilo

def save_referer if cookies[:referer].blank? cookies.permanent[:referer] = request.env["HTTP_REFERER"] || ''none'' end end

También hay una gema https://github.com/holli/referer_tracking para ayudar a manejar estos y otros seguimientos de forma automática.


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

hermoso ;-)