Response.Redirect при загрузке страницы не работает

У меня есть две страницы, страница входа и страница 1. Пользователь не может напрямую перейти на страницу page1, поскольку она содержит следующий код для события загрузки страницы. Пользователь перенаправляется на страницу входа.

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("loginpage.aspx");
}

Когда пользователь нажимает кнопку выхода на странице pag1, он / она перенаправляется на страницу входа после установки Session["role"]=null. Теперь на странице входа, если пользователь нажимает кнопку "Назад" в браузере, он / она может перейти на страницу 1. Только в этом случае Response.Redirect("loginpage.aspx"); в событии загрузки страницы не работает. Почему не работает? Как я могу заставить его работать или как запретить пользователю доступ к странице 1 в этом сценарии?

В прошлый раз я был беспомощен и закрылся, задав другой вопрос код для обнаружения нажатия кнопки" Назад "в любом (всех) браузерах

Изменить. В ответ на ответы: код кнопки выхода:

protected void btnLogOut_Click(object sender, EventArgs e)
{
    Session["role"] = null;
    Session.Abandon();
    Response.Redirect("login.aspx");
}

person Sami    schedule 23.11.2012    source источник
comment
Для нас было бы очень полезно узнать, действительно ли ваш код достигает точки Response.Redirect. Затем мы можем выяснить, проблема ли в самом перенаправлении или в том, что перенаправление не достигнуто.   -  person Jesse Carter    schedule 23.11.2012
comment
Не могли бы вы предоставить весь свой метод Page_Load?   -  person Jesse Carter    schedule 23.11.2012
comment
Да @JesseCarter. Но как вы думаете, зачем это нужно. Потому что я поделился кодом с самого начала, если страница загружается так же, как void pageload(){my shared code ...othercode...}   -  person Sami    schedule 23.11.2012


Ответы (4)


Страница, которую вы видите на обратной стороне, может быть просто кешированной версией.

Самый простой способ - вместо использования перенаправления ответа повторить метаобновление. Вы также должны убедиться, что сеанс чист.

Session.Abandon();
Response.Write("<meta http-equiv='refresh' content='0';URL='loginpage.aspx'>");
Response.End();

Если пользователь ответит, он снова попадет на эту страницу и будет переведен на URL-адрес, который вы хотите использовать. Ничто не мешает им быстро ответить более одного раза или выбрать страницу 1 из раскрывающегося списка истории и получить кешированную версию.

person Popnoodles    schedule 23.11.2012
comment
Есть ли у вас какие-либо идеи, пожалуйста, какой будет альтернатива Response.End(); в случае, если я буду использовать php? - person Sami; 23.11.2012

это определенно должно сработать, проверьте свой сеанс ["роль"], я думаю, он никогда не будет нулевым

при выходе сделайте это

Session.Abandon();

'pageoad не работает' в этом случае причина выполнения страницы не влияет на цикл страницы, событие Load всегда срабатывает при выполнении страницы.

Итак, если Page_Load иногда не запускается, это потому, что страница кэшируется и не выполняется на сервере. Страницу можно кэшировать в браузере, где-нибудь в маршрутизаторе или на сервере, используя кеширование страницы на стороне сервера.

Если вы не включили кеширование страницы на стороне сервера для страницы, она кешируется в браузере или в сети. Вы можете использовать настройки кеша, чтобы попытаться устранить это:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Это предотвратит кеширование страницы в нормальных условиях. (Убедитесь также, что ваш браузер не находится в автономном режиме, тогда он будет использовать все, что есть в кеше, независимо от его настроек кешируемости.)

person sajanyamaha    schedule 23.11.2012
comment
'pageoad не работает' в этом случае попробуйте удалить событие page_load и создать его заново из окна свойств, это происходит из-за некоторых файлов tmp - person sajanyamaha; 23.11.2012
comment
PageLoad не работает только при возврате со страницы входа, в противном случае - person Sami; 23.11.2012
comment
Спасибо +1 за хорошее объяснение. Ответ user822711 сработал для меня. Не могу понять, почему HttpCacheability.NoCache у меня не работает. Также его ответ действителен и для php. - person Sami; 23.11.2012

Вы можете попробовать что-то подобное

if (Session["role"] == null)
{
    Response.Write("Redirect Not Working");
    Response.Redirect("~/loginpage.aspx");
}

ОБЯЗАТЕЛЬНО сбросьте сеанс ["role"] = null при выходе из системы, потому что это значение будет сохраняться во время веб-сеанса.

person MethodMan    schedule 23.11.2012
comment
Не могли бы вы предоставить или показать еще код ..? Я думаю, что у вас есть проблема или ошибка в page_load, вы проверяете if (IsPostBack) .. подумайте о жизненном цикле страницы и о том, как все запускается внутри веб-страницы aspx, вам также необходимо завершить ответ .. - person MethodMan; 23.11.2012
comment
Недавно я столкнулся с этой точной проблемой, и даже несмотря на то, что страница работала ... Я перенаправлял с дополнительными ошибками ... так что это поможет, если вы разместите больше кода ... особенно в событии Page_Load Event - person MethodMan; 23.11.2012

Мне кажется, вам нужно удалить значение Session ["role"] и вернуть его к нулю. Когда пользователь выходит из системы, я не думаю, что вы очищаете свои значения сеанса, поэтому, когда они просматривают назад, загрузка вашей страницы все еще думает, что у них есть действительный сеанс входа в систему.

Самый простой способ проверить, так ли это, - поставить точку останова внутри блока if, после того, как вы проверите, чтобы увидеть Session ["role"] == null. Если вы никогда не попадаете в эту точку останова, вы знаете, что эта роль не нулевая, и они все еще технически «вошли в систему».

person Jesse Carter    schedule 23.11.2012
comment
Нет, Джесси, я установил значение null при выходе из системы - person Sami; 23.11.2012
comment
Можете ли вы в любом случае установить точку останова, чтобы мы могли убедиться, что Response.Redirect действительно попадает, когда пользователь нажимает обратно? - person Jesse Carter; 23.11.2012
comment
Извините, jesse pageoad не работает. Однако Session["role"] is null на данный момент это точно - person Sami; 23.11.2012