Как изменить идентификатор сеанса после входа в asp.net

У меня есть веб-сайт, в котором используется проверка подлинности и членство в файлах. Пользователь должен иметь файлы cookie, разрешенные для использования сайта. Мне было предложено изменить код, чтобы изменить идентификатор сеанса, как только пользователь войдет в систему. По-видимому, это защитит от атаки с фиксацией сеанса (http://en.wikipedia.org/wiki/Session_fixation). Кто-нибудь знает, как я могу изменить идентификатор сеанса без потери всего сеанса? У PHP есть специальный метод для этого, но я не могу найти эквивалент .NET.

Ответ 1

Вот сообщение в блоге, в котором говорится об этом:

ASP.NET не поддерживает напрямую функциональность для восстановления сеанса Я БЫ. См. Документацию, касающуюся вопрос здесь. Существует not-so быстрый и грязный путь, чтобы сделать это установив значение ASPNET_SessionID в значение пустую строку и перенаправление что значение регенерируется.

Ответ 2

Я ответил на аналогичный вопрос в Создание нового сеанса ASP.NET в текущем HTTPContext. В основном мы должны изменить часть внутреннего состояния SessionStateModule, чтобы иметь возможность восстанавливать идентификатор сеанса без потери объектов в сеансе. Я использовал отражение, чтобы установить для поля _rqId новый идентификатор и _rqSessionStateNotFound равным true. Недостатком является то, что мы должны предоставить приложение "Полное доверие".

Ответ 3

Это действительно старый вопрос, который я воскрешаю, но вот решение:

var manager = new SessionIDManager();
bool redirected, isAdded;
manager.SaveSessionID(System.Web.HttpContext.Current, 
    "5vonjb4mtb1of2fxvhjvkh5d", out redirected, out isAdded);

// sessionId now equals "5vonjb4mtb1of2fxvhjvkh5d"
var sessionId = Session.SessionID;