Как создать новый идентификатор сеанса
Возможно ли создать новый идентификатор для сеанса с использованием ASP.NET?
Я хочу, чтобы он изменился, когда кто-то запустится на мой сайт, прежде чем я установил свои начальные переменные сеанса.
Ответы
Ответ 1
Вы можете сделать это, используя класс SessionIdManager:
SessionIDManager manager = new SessionIDManager();
string newID = manager.CreateSessionID(Context);
bool redirected = false;
bool isAdded = false;
manager.SaveSessionID(Context, newID, out redirected, out isAdded);
[Пример кода из статьи Anas Ghanem]
Ответ 2
вы можете использовать
SessionIDManager.CreateSessionID Method :
возвращает уникальный идентификатор сеанса, который является произвольно сгенерированным числом, закодированным в 24-символьную строку,
Код
SessionIDManager Manager = new SessionIDManager();
string NewID = Manager.CreateSessionID(Context);
string OldID = Context.Session.SessionID;
bool redirected = false;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID,out redirected, out IsAdded);
Здесь вы можете найти полную информацию о hsi: Программно изменить идентификатор сеанса.
Ответ 3
да, можно создать новый идентификатор для сеанса.
ниже приведен один пример
SessionState.SessionIDManager Manager = new SessionState.SessionIDManager();
string NewID = Manager.CreateSessionID(Context);
string OldID = Context.Session.SessionID;
bool IsAdded = false;
Manager.SaveSessionID(Context, NewID, false, IsAdded);
Response.Write("Old SessionId Is : " + OldID);
if (IsAdded) {
Response.Write("<br/> New Session ID Is : " + NewID);
}
else {
Response.Write("<br/> Session Id did not saved : ");
}
Ответ 4
Я предполагаю, что это связано с безопасностью? Будет ли работать Session.Clear()
или Session.Abandon()
для вас? Это хорошая ссылка SO, связанная с этими методами.
В противном случае это сложно, потому что cookie сеанса ASP.NET уже находится в пользовательском браузере. Возможно, вы не уверены, что сеанс действительно изменился.
Ответ 5
Инфраструктура управления сеансом ASP.Net не предоставляет поддерживаемый способ изменения идентификатора сеанса во время обработки запроса. Если для вас важна запись поддерживаемого кода, есть несколько вещей, о которых нужно знать с принятым ответом.
- Оба
CreateSessionID
и SaveSessionID
отмечены "Этот метод не предназначен для вызова из кода приложения".
- Поставщик SessionID является подключаемым типом (см., например, Реализация пользовательского SessionIDManager), поэтому, по крайней мере, вам нужно создать экземпляр правильного типа.
- Состояние сеанса, прикрепленное к
HttpContext
, будет оставаться связанным с начальным идентификатором сеанса, поэтому все, что вы помещаете в сумку состояния сеанса, будет потеряно. Поскольку вы ничего не можете сделать с сеансом, как только вы изменили свой идентификатор, это бессмысленно изменить ваш идентификатор таким образом.
К сожалению, нет поддерживаемого способа сделать это без кругового путешествия. Вам нужно будет стереть файл cookie состояния сеанса при создании формы входа. Когда пользователь отправит форму обратно, структура вызовет в SessionIDManager
, чтобы сгенерировать новую. Правильное удаление cookie сеанса немного сложнее, чем показывает большинство примеров кода. Имя файла cookie - это еще один параметр, настраиваемый в файле web.config. Вы должны прочитать его из конфигурации, обратившись к свойству:
((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName
Куки файлы сеанса не привязаны к приложению, поэтому, если на одном сервере установлено два приложения, часто желательно, чтобы они использовали разные имена файлов cookie, поэтому это требуется более часто, чем вы думаете.