Подтвердить что ты не робот

Как создать новый идентификатор сеанса

Возможно ли создать новый идентификатор для сеанса с использованием ASP.NET?

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

4b9b3361

Ответ 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, поэтому это требуется более часто, чем вы думаете.