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 перенаправляет логины для примера.