Как работает обработка сессий .NET? Сессии поглощают всю память, если куки отключены - PullRequest
0 голосов
/ 28 октября 2010

В моем проекте я настроил сессии .NET для входа в базу данных.У меня также есть global.asax, который реализует Session_Start ().В Session_Start () я записываю три вещи для сессии:

  • Время начала сеанса.
  • Адрес хоста пользователя.
  • Сериализуемый объект устройства, заключающий в себеагент пользователя.

Проблема в том, что пользователи, которые не разрешают использование файлов cookie, также не будут разрешать сеансовые файлы cookie.(Легко воспроизводится, если поместить URL-адрес сайта в ограниченные сайты IE).

Если я продолжу обновлять (положив палец на F5), для каждого запроса будет создан новый сеанс (-> нет файла cookie сеанса).Вскоре процесс веб-сервера увеличивается до нескольких сотен мегабайт.Не имеет значения, используете ли вы IIS7 или локальный веб-сервер Cassini.

Теперь проблема в том, что память не освобождается до истечения времени ожидания сеанса.Какова здесь логика, если сессии действительно должны идти в базу данных?Как долго .NET будет хранить их в памяти?В конце концов, вы даже получите исключения Out Of Memory!

Кто-нибудь знает?Как обнаружить и предотвратить такие (почти злонамеренные) «атаки»?

Рене

Ответы [ 2 ]

0 голосов
/ 28 октября 2010

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

Используйте только сеансы для сохранения состояния пользователя (после входа в систему).

0 голосов
/ 28 октября 2010

Какая логика здесь, если сеансы действительно должны идти в базу данных?

Кто сказал, что они идут в базу данных?Если это ваш код в start stop, .NET не знает об этом.Таким образом, он сохраняет их в памяти.

Проблема в том, что пользователи, которые не разрешают использование файлов cookie, также не разрешают сеансовые файлы cookie *

Я бы назвал это немногонеобычно.Большинство пользователей, блокирующих файлы cookie, НЕ будут блокировать сеансовые файлы cookie.

Вскоре процесс веб-сервера вырастет до нескольких сотен мегабайт

Не проблема.Например, «возвращайся, когда он достигнет 1,5 ГБ».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...