SessionID остается прежним после вызова Session.Abandon - PullRequest
13 голосов
/ 15 сентября 2010

Я пишу некоторый код регистрации, основанный на SessionID ...

Однако, когда я выхожу (вызывая Session.Abandon) и снова авторизируюсь, SessionID остается прежним.По сути, каждый браузер на моем ПК имеет свой собственный идентификатор сеанса, «подключенный», и по какой-то причине он не изменится: /

Есть идеи, что происходит?

Моя конфигурация сеанса выглядит такэто:

    <sessionState
       mode="InProc"
       timeout="1" />

Спасибо, Павел

Ответы [ 5 ]

14 голосов
/ 15 сентября 2010

Ознакомьтесь с этой статьей, в которой объясняется процесс сеанса.abandon

http://support.microsoft.com/kb/899918

Ссылка взята сверху -

"При выходе из сеанса идентификатор сеансаcookie не удаляется из браузера пользователя. Поэтому, как только сеанс будет отменен, любые новые запросы к тому же приложению будут использовать тот же идентификатор сеанса, но будет иметь новый экземпляр состояния сеанса "

5 голосов
/ 15 сентября 2010

Это поведение по умолчанию, как указано здесь :

Идентификаторы сеансов для отмененных или просроченных сеансов перерабатываются по умолчанию. То есть, если сделан запрос, который включает в себя идентификатор сеанса для истекшего или прекращенного сеанса, новый сеанс запускается с использованием того же идентификатора сеанса. Вы можете отключить это, установив для атрибута регенерацииExpiredSessionId элемента конфигурации sessionState значение true

Вы можете отключить этот параметр, как указано выше.

РЕДАКТИРОВАТЬ: установка для атрибута EGRENTRATEExpiredSessionId значения true работает только для сеансов без файлов cookie. Чтобы преодолеть вашу проблему, вы можете реализовать собственный класс, который наследует класс SessionIDManager. Вы можете получить информацию об этом здесь и здесь .

2 голосов
/ 07 февраля 2018

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

Обратите внимание, что эта статья относится только к сайтам с поддержкой файлов cookie (cookieless = false).

Шаг (1) Измените свой файл web.config и добавьте флаг «recycrateExpiredSessionID», как показано ниже -

<sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" />

Шаг (2) Добавьте следующий код в событие выхода из системы -

Session.Clear(); 
Session.Abandon();
Response.Cookies.Add(New HttpCookie("ASP.NET_SessionId", ""));
Response.redirect(to you login page);

Шаг (3) Добавьте следующий код в событие page_load вашей страницы входа в систему -

if(!IsPostBack) 
{
    Session.Clear(); 
    Session.Abandon();
}

Шаг 2 и 3 служат одной ВАЖНОЙ цели. Этот код обеспечивает создание нового идентификатора сеанса после нажатия кнопки «Войти». Это предотвращает слабое управление сеансами (уязвимость фиксации сеансов), которое, вероятно, будет обнаружено во время стороннего тестирования вашего сайта на проникновение.

Надеюсь, это поможет.

2 голосов
/ 31 октября 2011

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

Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30)

Не вступит в силу, пока страница не будет загружена.В моем приложении у меня есть простая подпрограмма безопасности, которая вызывает новый идентификатор, например:

if session("UserID") = "" then 
    Response.Cookies("ASP.NET_SessionId").Expires = DateTime.Now.AddYears(-30)
    Response.Redirect("login.aspx")
end if
0 голосов
/ 15 сентября 2010

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

Редактировать: Очистка файла cookie сеанса при прекращении сеанса заставит ASP.NET создать новый сеанс и идентификатор сеанса для следующего запроса.,Кстати, еще один способ очистить файл cookie сеанса - использовать метод SessionIDManager.RemoveSessionID .

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