ASP.Net Logout не работает должным образом - PullRequest
0 голосов
/ 01 августа 2011

Я знаю, что об этом спрашивали и отвечали много раз ранее, поверьте мне, я просматривал все сообщения в поисках решения, прежде чем снова спросить .

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

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

    private void ExpirePageCache()
    {
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.Now - new TimeSpan(1, 0, 0));
        Response.Cache.SetLastModified(DateTime.Now);
        Response.Cache.SetAllowResponseInBrowserHistory(false);
    }

Код из logout.aspx выглядит следующим образом:

    protected void Page_Load(object sender, EventArgs e)
    {
        FormsAuthentication.SignOut();
        HttpContext.Current.Session.Clear();
        HttpContext.Current.Session.Abandon();
        Response.Redirect("~/Account/Login.aspx");
    }

Должен ли я использовать Server.Transfer() вместо Response.Redirect()?

Я где-то читал, что мне не разрешают очищать историю браузера программно, поэтому я немного застрял. У кого-нибудь есть подсказки, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

Я подозреваю, что что-то еще произошло.

Когда вы вызываете response.redirect, ни одно из сгенерированного содержимого страницы не отправляется клиенту. ASP использует буферизацию, поэтому, когда вы генерируете свою страницу, она буферизуется до тех пор, пока вы не доберетесь до конца, после чего этот буфер отправляется клиенту. Это позволяет вам вносить изменения вплоть до последнего момента, например, отправляя ответ перенаправления. Так что это не ваша проблема.

Используете ли вы кэширование вывода или задаете постоянный тикет проверки формы? Если в браузере есть кэшированная копия содержимого, он будет показывать это, а не попадать на сервер (как это и делается для кэширования). Хотя в тот момент, когда вы нажмете на сервер, если файл cookie недействителен, сервер должен перенаправить вас куда-нибудь, чтобы получить новый билет. если он этого не делает, то каким-то образом находит действующий билет.

Вы можете использовать Fiddler для мониторинга трафика. Вы можете имитировать новый сеанс браузера, отправив запрос вручную с помощью Fiddler и удалив файлы cookie сеанса и билета.

Simon

0 голосов
/ 01 августа 2011

Да, эта строка кода уже включена в событие Page_Load страницы logout.aspx. Это первая строка кода, которая выполняется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...