Ответ.Редирект на страницу загрузки не работает
У меня есть две страницы, страница входа и страница 1. Пользователь не может напрямую перейти к странице 1, так как она содержит следующий код для события pageload. Пользователь перенаправляется на страницу входа в систему.
if (Session["role"] == null)
{
Response.Write("Redirect Not Working");
Response.Redirect("loginpage.aspx");
}
Когда пользователь нажимает выход на странице pag1, он перенаправляется на страницу входа после установки Session["role"]=null
. Теперь на странице входа в систему, если пользователь нажимает на кнопку возврата браузера, он/она может перейти на страницу 1. только в этом случае Response.Redirect("loginpage.aspx");
в pageload событие не работает. Почему это не работает? Как я могу заставить его работать, или как я могу запретить пользователю доступ к странице 1 в этом сценарии?
Я был беспомощен и закрыт в прошлый раз, задав ему другой способ код для обнаружения кнопки возврата браузера для любого (всего) браузера
Edit в ответ на ответы: код против кнопки выхода -
protected void btnLogOut_Click(object sender, EventArgs e)
{
Session["role"] = null;
Session.Abandon();
Response.Redirect("login.aspx");
}
4 ответа:
Страница, которую вы видите на обратной стороне, может быть просто кэшированной версией.
Самым простым способом может быть, вместо использования перенаправления ответа, Эхо мета-обновления. Вы должны убедиться, что сеанс также ясен.
Session.Abandon(); Response.Write("<meta http-equiv='refresh' content='0';URL='loginpage.aspx'>"); Response.End();
Если пользователь ответит, он снова попадет на эту страницу и будет перенаправлен на нужный вам URL. Ничто не мешает им быстро вернуться назад более одного раза или выбрать страницу 1 из выпадающего списка истории и получить кэшированную версию.
Это должно определенно работать, проверьте свою сессию ["роль"], я думаю, что она никогда не будет нулевой
При выходе из системы сделайте это
Session.Abandon();
'pageoad не работает' в этом случае причина выполнения страницы не влияет на цикл страницы, событие загрузки Всегда срабатывает при выполнении страницы.
Итак, если Page_Load иногда не запускается, это потому, что страница кэшируется и не выполняется на сервере. Страница может быть кэширована в браузере, в маршрутизаторе где-то по пути, или на сервере, используя кэширование страниц на стороне сервера.
Если вы не включили кэширование страницы на стороне сервера, она кэшируется в браузере или в сети. Вы можете использовать настройки кэша, чтобы попытаться прояснить это:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Это позволит сохранить страницу от кэширования в обычных условиях. (Проверьте также, что ваш браузер не находится в автономном режиме, тогда он будет использовать все, что находится в кэше, независимо от настроек кэшируемости.)
Можете ли вы попробовать что-то вроде этого
if (Session["role"] == null) { Response.Write("Redirect Not Working"); Response.Redirect("~/loginpage.aspx"); }
Обязательно сбросьте сеанс ["роль"] = null во время выхода из системы, так как это значение будет сохраняться во время веб-сеанса
Мне кажется, что вам нужно удалить значение Session["role"] и установить его обратно в null. Когда пользователь выходит из системы, я не думаю, что вы очищаете свои значения сеанса, поэтому, когда они просматривают вашу страницу, Загрузка все еще думает, что у них есть действительный сеанс входа.
Простой способ проверить, так ли это, - поместить точку останова внутри блока if, где вы проверяете, чтобы увидеть Session["role"] == null. Если вы никогда не достигали этой точки останова, вы знаете, что роль не является нулевой, и они являются все еще технически "вошел в систему".