Возможно ли создать новый идентификатор для сеанса с использованием ASP.NET?
Я хочу, чтобы он изменился, когда кто-то запустится на мой сайт, прежде чем я установил свои начальные переменные сеанса.
Возможно ли создать новый идентификатор для сеанса с использованием ASP.NET?
Я хочу, чтобы он изменился, когда кто-то запустится на мой сайт, прежде чем я установил свои начальные переменные сеанса.
Вы можете сделать это, используя класс 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]
вы можете использовать
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: Программно изменить идентификатор сеанса.
да, можно создать новый идентификатор для сеанса. ниже приведен один пример
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 : ");
}
Я предполагаю, что это связано с безопасностью? Будет ли работать Session.Clear()
или Session.Abandon()
для вас? Это хорошая ссылка SO, связанная с этими методами.
В противном случае это сложно, потому что cookie сеанса ASP.NET уже находится в пользовательском браузере. Возможно, вы не уверены, что сеанс действительно изменился.
Инфраструктура управления сеансом ASP.Net не предоставляет поддерживаемый способ изменения идентификатора сеанса во время обработки запроса. Если для вас важна запись поддерживаемого кода, есть несколько вещей, о которых нужно знать с принятым ответом.
CreateSessionID
и SaveSessionID
отмечены "Этот метод не предназначен для вызова из кода приложения".HttpContext
, будет оставаться связанным с начальным идентификатором сеанса, поэтому все, что вы помещаете в сумку состояния сеанса, будет потеряно. Поскольку вы ничего не можете сделать с сеансом, как только вы изменили свой идентификатор, это бессмысленно изменить ваш идентификатор таким образом.К сожалению, нет поддерживаемого способа сделать это без кругового путешествия. Вам нужно будет стереть файл cookie состояния сеанса при создании формы входа. Когда пользователь отправит форму обратно, структура вызовет в SessionIDManager
, чтобы сгенерировать новую. Правильное удаление cookie сеанса немного сложнее, чем показывает большинство примеров кода. Имя файла cookie - это еще один параметр, настраиваемый в файле web.config. Вы должны прочитать его из конфигурации, обратившись к свойству:
((System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState")).CookieName
Куки файлы сеанса не привязаны к приложению, поэтому, если на одном сервере установлено два приложения, часто желательно, чтобы они использовали разные имена файлов cookie, поэтому это требуется более часто, чем вы думаете.