Session.Abandon () не сразу покидает сессию - PullRequest
6 голосов
/ 23 мая 2011

В моем веб-приложении ASP.NET я звоню Session.Abandon() в Page_Load().Я ожидаю, что это сразу же прекратит сеанс, и в следующий раз, когда я ссылаюсь на HttpContext.Current.Session, должен быть создан новый сеанс.Однако размещение точек останова на обработчиках Session_End и Session_Start в Global.asax означает, что они не вызываются до тех пор, пока страница не закончит рендеринг.

Итак, два вопроса:

1)Почему?

2) Как я могу продолжать использовать HttpContext.Current.Session в жизненном цикле страницы после вызова Session.Abandon ().

Заранее спасибо!

Ответы [ 3 ]

10 голосов
/ 23 мая 2011

http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx

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

4 голосов
/ 12 июня 2013

Это было мое решение:

private void PurgeSession()
{
    try
    {
        Session.Clear();
    }
    catch (Exception) {  }

    try
    {
        Session.Abandon();
    }
    catch (Exception) {  }

    try
    {
        Session.RemoveAll();
    }
    catch (Exception) {  }

    try
    {
        Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId") 
                                {Expires = DateTime.Now.AddYears(-1)});
    }
    catch (Exception) {  }
}

Это фактически вариант орбитальной бомбардировки.

Некоторая информация поступила из: http://www.dotnetfunda.com/articles/article1395-how-to-avoid-the-session-fixation-vulnerability-in-aspnet-.aspx

2 голосов
/ 23 мая 2011

Session.Abandon () фактически ожидает, пока страница не будет отрисована.

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