Когда использование Сессий является плохой вещью, и что случилось с ним?

Я знаю это в общественном сервере <sessionState mode="Off" /> что означает, что Вы не можете использовать Сессии, и несколько лет назад я помню, что работал над веб-сайтом, где нам не разрешили использовать сессии.
В моей точке зрения сессии являются очень полезным инструментом, если мы справились, как использовать правильный путь, но используем переменную сеанса в веб-сайте, что-то плохо, когда его плохое и когда его нет?

Обновление
И Что мы можем использовать вместо этого для предотвращения его путаницы?

9
задан Amr Elgarhy 9 May 2010 в 10:06
поделиться

7 ответов

Сессии не плохи сами по себе. Но ими также не следует злоупотреблять. Вы должны особенно избегать "О, мне нужен этот кусок информации здесь и здесь, давайте сохраним его в сессии и используем его позже".

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

Такое глобальное состояние также препятствует тестируемости. Большая неорганизованная сессия также приводит к увеличению использования памяти. Альтернативой состоянию сессии может быть состояние представления, например.

(Я не знаю, говорите ли вы о состоянии сессии, или о концепции сессии в целом. Если о последнем, то мой ответ не совсем уместен)

.
8
ответ дан 4 December 2019 в 13:46
поделиться

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

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

2
ответ дан 4 December 2019 в 13:46
поделиться

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

У вас есть страница приборной панели, и на ней расположено несколько маленьких модулей, каждый из которых загружает свое содержимое через ajax. Если вы используете сессию, вы можете загрузить только один модуль за раз, потому что сессия блокируется (для каждого пользователя) во время запроса. Если сессия не используется, блокировки нет, и браузер сможет запросить максимальное количество ресурсов (4 или более одновременно).

См. "Concurrent Requests and Session State" здесь:

http://msdn.microsoft.com/en-us/library/ms178581.aspx

Если вы столкнулись с этим, либо не используйте сессию, либо установите ее в режим только для чтения (это трудно сделать в ASP.NET MVC, насколько я знаю).

Обновление: Еще два реальных сценария, в которых это может произойти:

  • У вас есть страница asp.net, которая записывает изображения в двоичный ответ. Вы делаете это, потому что вам нужно проверить разрешения или другие условия, чтобы определить, нужно ли передавать изображение и какое именно. Если у вас есть куча тегов изображений, ссылающихся на эту страницу в их SRC для получения изображений, вы сможете получить только одно за раз.
  • У вас есть консоль администратора, которая позволяет вам управлять задачами. Вы хотите иметь возможность нажимать кнопку и запускать задачи на сервере асинхронно с ajax индикаторами выполнения. Если ваши ajax-вызовы запрашивают asp-страницы, когда у вас есть сессия (независимо от того, обращаетесь вы к ней или нет), вы сможете запускать только одну за раз. Думаю, это похоже на пример с приборной панелью, но я столкнулся с этим, и это меня убило.
2
ответ дан 4 December 2019 в 13:46
поделиться

Это интересный вопрос, и я согласен, что сессии могут быть очень грязными, если их неправильно использовать. Один из подходов к решению этой проблемы заключается в том, чтобы весь сложный объект (например, содержимое корзины магазина) хранился в одной сессии, а не в нескольких сессиях, разбросанных по одному веб-приложению. Сессии можно хранить в базе данных SQL Server на случай, скажем, отключения электричества.

0
ответ дан 4 December 2019 в 13:46
поделиться

Вы также не хотите использовать сессии для хранения частной информации. Это похоже на то, как люди пытаются хранить пароли непосредственно в cookies, что также нежелательно.

0
ответ дан 4 December 2019 в 13:46
поделиться

Люди все еще боятся принимать cookies, которые необходимы для использования сеансов. Кроме того, существуют проблемы безопасности.

1
ответ дан 4 December 2019 в 13:46
поделиться

Сессии истекают это волатильно, так что может случиться, что сессии выйдут по времени и тому подобное, так что это минус

2
ответ дан 4 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: