Как и почему идентификаторы сеансов повторно используются в ASP.NET

Переводы статьи Переводы статьи
Код статьи: 899918 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

ВВЕДЕНИЕ

В данной статье описывается, как и почему Microsoft ASP.NET идентификаторов сеансов используются.

Дополнительная информация

ASP.Состояние сеанса NET — это технология, которая позволяет хранить данные пользователя на сервере. Веб-приложения можно использовать эти данные для обработки запросов от пользователя, для которого создан экземпляр состояния сеанса. Состояние сеанса пользователя определяется идентификатором сеанса. Идентификатор сеанса доставляется с помощью одного из следующих методов:
  • Идентификатор сеанса является частью файла cookie, который отправляется в обозреватель пользователя.
  • Идентификатор сеанса внедряется в URL-адрес. Этот прием называется также сеанса без файлов cookie.
ИД сеанса являются 120-разрядное случайное число, представленный строкой 20 символов. Строка имеет формат, таким образом, могут быть включены в URL-адрес и не подвергается кодировку URL. Например строка может использоваться в сеансах без файлов cookie. Наиболее часто используемый метод доставки идентификаторов сеансов, используя файлы cookie для хранения идентификаторов сеансов.

При первом открытии веб-обозревателя пользователя и затем переходит к веб-узлу реализующий ASP.Состояние сеанса NET cookie отправляется в веб-обозревателе с имя «ASP.NET_SessionId"и 20-символьное значение.

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

Например app1.tailspintoys.com и app2.tailspintoys.com являются целевыми страницами ASP.NET приложения. Если пользователь переходит на app1.tailspintoys.com и затем Переход к app2.tailspintoys.com использовать оба приложения того же объекта cookie и тем же Идентификатором сеанса для отслеживания состояния сеанса пользователя в каждой приложения. Приложения не имеют одинаковое состояние сеанса. Приложения используют только один идентификатор сеанса.

Таким образом повторное использование идентификаторов сеанса для по следующим причинам. Например при повторном использовании идентификаторов сеансов, у вас нет сделать следующее:
  • Создание новой криптографически Уникальный идентификатор сеанса после вывода допустимый идентификатор.
  • Создать новый идентификатор сеанса для каждого ASP.NET, которое находится в одном домене.
Когда веб-приложение требует входа в систему и предлагает выход страницы» или «option», мы рекомендуем очистить состояние сеанса, когда пользователь завершил сеанс веб-узла. Чтобы очистить состояние сеанса, вызовите Session.Abandon метод. В Session.Abandon метод позволяет очистить состояние сеанса без ожидания тайм-аута сеанса состояние. По умолчанию это время ожидания составляет 20-минутный скользящий срок действия. Это завершение срока действия обновляется каждый раз, пользователь делает запрос к веб-узлу и представлены cookie идентификатор сеанса. В Забыть метод устанавливает флаг в объект состояния сеанса, который показывает, что состояние сеанса будет отброшен. Флаг, проверяются и затем оказано на Окончание запроса страницы. Таким образом пользователь может использовать объекты сеанса на странице После вызова Забыть метод. Сразу же после завершения обработки страницы сеанс удаляется.

При использовании режима состояния сеанса в процессе этих объектов состояния сеанса хранятся в HttpCache. HttpCache поддерживает метод обратного вызова, если выполняются следующие условия:
  • Элемент кэша удален.
  • Диспетчер состояния сеанса Регистры Session_OnEnd обработчик событий вызывается, когда запись кэша удалены.
Когда диспетчер состояния сеанса удаляет состояние сеанса объект находится в кэше, руководитель HttpCache будет вызывать все зарегистрированные обратные вызовы. По сути, это вызывает Session_OnEnd обработчик событий.

Если забыть сеанс ID cookie не удаляется из обозревателя пользователя сеанса. Таким образом, как можно скорее как сеанс был Ликвидировано, все новые запросы с того же приложения будут использовать один идентификатор сессии но будет иметь состояние новый сеанс экземпляр. В то же время, если пользователь открывает другой приложения внутри одного DNS домен, он не потеряет свои состояния сеанса после Забыть метод вызывается из одного приложения.

В некоторых случаях может не требуется повторно использовать идентификатор сеанса. И если вы понимаете последствия не повторное использование Идентификаторов сеанса, используйте следующий код сбросить сеанс и очистить файл cookie идентификатор сеанса:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
В этом примере код очищает состояние сеанса от сервера и наборы состояние cookie сеанса значение NULL. Значение null эффективно очищает файл cookie из браузера.

Если пользователь не выйти из приложения и сеанса состояние тайм-аут, приложение по-прежнему использовать одинаковое состояние сеанса файл cookie, если обозреватель не закрыт. По этой причине можно перенаправлять пользователя страница входа в систему и состояние cookie сеанса пользователя должна присутствовать. Чтобы гарантировать При открытии страницы входа в систему (login.aspx), используется идентификатор нового сеанса отправить пустой файл cookie обратно клиенту. Чтобы сделать это, добавьте файл cookie для Коллекция ответа. Отправьте коллекцию ответ обратно клиенту. Самый простой способ Отправить пустой файл «cookie» — с помощью Response.Redirect метод. Поскольку коллекция файлов «cookie» всегда имеет значение для приложения ASP.NET_SessionId, нельзя просто проверить, если этот файл cookie существует, поскольку будет создан Response.Redirect цикл. Можно задать строку запроса на перенаправление на страницу входа в систему.

Или, как показано в следующем примере кода, можно использовать другой файл cookie рассказать, если вы уже перенаправляются на страницу входа в систему. В целях повышения безопасности и убедитесь в том, что никто не пытается открыть страницу входа в систему, используя второй файл «cookie» с помощью ASP.NET cookie в следующем примере кода используется FormsAuthentication класс для шифрования и расшифровки данных cookie. Затем пример кода задает время ожидания 5 секунд.
private void Page_Load(object sender, System.EventArgs e)
{ 
if( !IsPostBack && 
( Request.Cookies["__LOGINCOOKIE__"] == null ||
Request.Cookies["__LOGINCOOKIE__"].Value == "" ) )
{
//At this point, we do not know if the session ID that we have is a new
//session ID or if the session ID was passed by the client. 
//Update the session ID.

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

//To make sure that the client clears the session ID cookie, respond to the client to tell 
//it that we have responded. To do this, set another cookie.
AddRedirCookie();
Response.Redirect( Request.Path );
}

//Make sure that someone is not trying to spoof.
try
{
FormsAuthenticationTicket ticket =
FormsAuthentication.Decrypt( Request.Cookies["__LOGINCOOKIE__"].Value );

if( ticket == null || ticket.Expired == true ) 
throw new Exception();

RemoveRedirCookie();
}
catch
{
//If someone is trying to spoof, do it again.
AddRedirCookie();
Response.Redirect( Request.Path );
}


Response.Write("Session.SessionID="+Session.SessionID+"<br/>");
Response.Write("Cookie ASP.NET_SessionId="+Request.Cookies["ASP.NET_SessionId"].Value+"<br/>");
} 

private void RemoveRedirCookie() 
{ 
Response.Cookies.Add(new HttpCookie("__LOGINCOOKIE__", "")); 
} 

private void AddRedirCookie()
{

FormsAuthenticationTicket ticket = 
new FormsAuthenticationTicket(1,"Test",DateTime.Now,DateTime.Now.AddSeconds(5), false,""); 
string encryptedText = FormsAuthentication.Encrypt( ticket ); 
Response.Cookies.Add( new HttpCookie( "__LOGINCOOKIE__", encryptedText ) );
}

Свойства

Код статьи: 899918 - Последний отзыв: 19 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft .NET Framework 1.1
Ключевые слова: 
kbinfo kbhowto kbmt KB899918 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:899918

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com