Я пытаюсь сохранить http_referer, таким образом, я могу передать пользователя обратно тому URL после того, как он вошел в систему. Прямо сейчас у меня есть before_filter в моих контроллерах, который отправляет их в журнал на странице, если сессия не была создана через redirect_to. Однако, когда я проверяю HTTP_REFERER, это - ноль (тогда как 'REQUEST_URI' действительно возвращается, куда я первоначально происхожу из).
Спасибо.
HTTP_REFERER - это HTTP-заголовок, установленный браузером в запросе, содержащем адрес предыдущей веб-страницы, с которой была сделана ссылка на текущую запрошенную страницу. Он не будет установлен при прямом переходе на страницу.
REQUEST_URI (также доступен через request.request_uri ()
) - это унифицированный идентификатор ресурса, используемый для доступа к контроллеру / действию Rails, и всегда должен быть установлен .
Вставьте этот код отладки в ваше представление:
<ul>
<% request.env.each do |item| %>
<li><%= item[0] %> : <%= item[1] %></li>
<% end %>
</ul>
Если HTTP_REFERER не установлен, убедитесь, что вы переходите на эту страницу через ссылку или перенаправление, и посмотрите, установлен ли он тогда.
Также есть вероятность, что ваш браузер не устанавливает заголовок HTTP_REFERER. Убедитесь, что у вас нет надстройки, влияющей на это. Вы можете использовать отличную надстройку Firefox под названием Tamper Data , чтобы увидеть отправляемые заголовки.
Независимо от того, какое решение вы придумаете, вам необходимо иметь возможность обрабатывать пустой случай реферера, потому что у клиента есть выбор, указывать его или нет. (Он выключен, когда вы находитесь в режиме приватного просмотра Safari или в режиме инкогнито Chrome)
В Rails вы можете использовать redirect_to: back
, который будет использовать HTTP_REFERER, если он установлен, или вызвать ошибку иначе.
При использовании redirect_to: back, если нет реферера, будет вызвана ошибка RedirectBackError. Вы можете указать какое-либо резервное поведение для этого случая, спасая RedirectBackError.