Request.UrlReferrer null?

На странице aspx С#.NET(я запускаю фрейм v3.5) мне нужно знать, откуда пришел пользователь, поскольку они не могут просматривать страницы без входа в систему. Если у меня есть страница A (страница пользователя хочет просмотреть) перенаправить на страницу B (страница входа), объект Request.UrlReferrer имеет значение NULL.

Справочная информация. Если пользователь не вошел в систему, я перенаправляюсь на страницу входа (B в этом сценарии). После входа в систему я хотел бы вернуть их на страницу, которую они запрашивали, прежде чем они были вынуждены войти в систему.

UPDATE:
Хорошее быстрое решение похоже:
//if user not logged in Response.Redirect("..MyLoginPage.aspx?returnUrl=" + Request.ServerVariables["SCRIPT_NAME"]);
Затем просто взгляните на QueryString на странице входа, которую вы заставили, и поместите пользователя там, где они были после успешного входа в систему.

Ответы

Ответ 1

Если вы используете стандартный поставщик членства и задаете авторизацию для каталога/страницы, код автоматически установит параметр запроса ReturnUrl и перенаправит после успешного входа.

Если вы не хотите использовать Шаблон поставщика членства, я бы предложил вручную выполнить параметр параметра строки запроса. HTTP-источники не очень надежны.

Ответ 2

UrlReferrer основан на заголовке HTTP_REFERER, который должен отправить браузер. Но, как и все оставленные клиенту, это переменная.

Я знаю, что некоторые "комплекты безопасности" (например, Norton Internet Security) лишат этот заголовок, полагая, что он помогает отслеживать поведение пользователя. Кроме того, я уверен, что некоторые расширения Firefox делают то же самое.

Итог заключается в том, что вы не должны доверять ему. Просто добавьте URL-адрес в строку GET и настройте перенаправление.

ОБНОВЛЕНИЕ: Как уже упоминалось в комментариях, вероятно, рекомендуется ограничить перенаправление из параметра GET, чтобы работать только на относительные ссылки без домена, отказаться от шаблонов каталогов (../) и т.д. Таким образом, проверка работоспособности перенаправление; если вы придерживаетесь стандартного правила "не используйте любое введенное пользователем входное слепое правило", вы должны быть в безопасности.

Ответ 3

Проблема может быть связана с тем, как вы перенаправляете пользователя на другую страницу. В любом случае, URL-адрес реферала - это то, что вы должны принять как абсолютное правило - клиент может легко подделать его.

Ответ 4

То, что вы ищете, лучше всего сделать с помощью строковой переменной запроса (например, returnURL или originURL). Referrer лучше всего использовать для операций интеллектуального анализа данных, поскольку он очень ненадежный.

Посмотрите, как ASP.Net перенаправляет логины для примера.