Ответ.Редирект на страницу загрузки не работает


У меня есть две страницы, страница входа и страница 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 3

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. Если вы никогда не достигали этой точки останова, вы знаете, что роль не является нулевой, и они являются все еще технически "вошел в систему".