Ruby on Rails - request.env ['HTTP_REFERER'] возвращает ноль

Я пытаюсь сохранить http_referer, таким образом, я могу передать пользователя обратно тому URL после того, как он вошел в систему. Прямо сейчас у меня есть before_filter в моих контроллерах, который отправляет их в журнал на странице, если сессия не была создана через redirect_to. Однако, когда я проверяю HTTP_REFERER, это - ноль (тогда как 'REQUEST_URI' действительно возвращается, куда я первоначально происхожу из).

Спасибо.

7
задан Naujpr 23 June 2010 в 19:10
поделиться

2 ответа

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 , чтобы увидеть отправляемые заголовки.

14
ответ дан 6 December 2019 в 09:18
поделиться

Независимо от того, какое решение вы придумаете, вам необходимо иметь возможность обрабатывать пустой случай реферера, потому что у клиента есть выбор, указывать его или нет. (Он выключен, когда вы находитесь в режиме приватного просмотра Safari или в режиме инкогнито Chrome)

В Rails вы можете использовать redirect_to: back , который будет использовать HTTP_REFERER, если он установлен, или вызвать ошибку иначе.

При использовании redirect_to: back, если нет реферера, будет вызвана ошибка RedirectBackError. Вы можете указать какое-либо резервное поведение для этого случая, спасая RedirectBackError.

6
ответ дан 6 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

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