Cache VS Session VS куки? - PullRequest
       21

Cache VS Session VS куки?

61 голосов
/ 16 февраля 2009

Что можно и нельзя делать с файлами cookie Cache VS Session VS?

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

Должен ли я вместо этого использовать кеш, куки или какую-то комбинацию для этого?

(Кроме того, когда в приложении возникает какая-либо ошибка, объект сеанса сбрасывается сам, и из-за этого у меня возникают другие проблемы)

Я в основном занимаюсь настольным программированием и чувствую, что мне здесь не хватает знаний, так что любой, кто сможет узнать, где использовать Cache, Session, Cookies (или db), будет признателен

Редактировать: Из ответов кажется, что мне нужно сочетание БД и куки.

  1. Я должен сохранить бронирование в базе данных, связанной с идентификатором сессии
  2. Сохранение идентификатора сеанса в файле cookie (в зашифрованном виде).
  3. Каждую страницу загружают, проверяют куки и извлекают бронирование из базы данных
  4. У меня есть процедура очистки, которая выполняется раз в неделю и очищает незавершенные заказы.

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

Я правильно понял?

И спасибо за отличные объяснения всем вам!

Ответы [ 7 ]

82 голосов
/ 16 февраля 2009

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

  • Session используется для хранения информации о пользователе для текущего веб-сеанса на сервере . Он поддерживает использование сервера базы данных в качестве внутреннего хранилища.
  • Cookie должен использоваться для хранения информации о пользователе для текущего веб-сеанса или постоянной информации о клиенте , поэтому клиент имеет контроль над содержимое файла cookie.
  • Cache объект совместно используется пользователями в одном приложении . Его основная цель - кэшировать данные из хранилища данных и не должна использоваться в качестве основного хранилища. Он поддерживает функции автоматической аннулирования .
  • Application объект разделяется между пользователями для хранения состояния приложения и должен использоваться соответствующим образом.

Если ваше приложение используется несколькими пользователями, не прошедшими проверку подлинности, я предлагаю вам сохранить данные в файле cookie. Если требуется аутентификация, вы можете либо сохранить данные в БД вручную, либо использовать функции управления профилями ASP.NET.

4 голосов
/ 16 февраля 2009

Сеть по своей природе является автономной моделью, и ни один из упомянутых вариантов (Session, Application, Cache, ...) не является достаточно надежным. Время сеанса истечет, рабочий процесс перезапустится и т. Д.

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

Просто убедитесь, что идентификатор зашифрован, а затем строка в кодировке base64, а не просто числовое значение.

EDIT:

После вашего дополнительного объяснения в исходном вопросе и комментария от Мехрада Афшари, хорошим решением для вас будет использование Session, но вместо InProc установите хранилище Sql Server.

Вот более подробная информация и инструкции по настройке: http://msdn.microsoft.com/en-us/library/ms178586.aspx

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

Если вам действительно необходимо постоянное хранилище, единственным решением будет нестандартное решение с базой данных, как я первоначально обрисовал.

2 голосов
/ 16 февраля 2009

Сеанс хранится на сервере, время ожидания по умолчанию составляет 20 минут (это настраивается). Я бы сохранил это в cookie или в viewstate (если доступно), чтобы предотвратить тайм-аут.

Если ваше состояние хранится в InProc (настройка по умолчанию), то наличие более одного сервера в ферме также вызовет проблемы, если вы не внедрили какой-либо «липкий сеанс», который будет держать пользователя на том же сервер в ферме для последующих звонков.

Я стараюсь по возможности избегать сеансов (создает дополнительную нагрузку и использование памяти на сервере) и по возможности выключаю viewstate, чтобы размер страницы оставался низким. Куки-файлы часто являются самым легким вариантом, но у ваших пользователей это может быть отключено, и вам потребуется резервный режим, который все еще позволяет им использовать сайт.

Редактировать (добавление пояснения на основе ответа от автора):

Viewstate хранится в скрытом поле и представляет собой сериализованное представление всех объектов в хранилище Viewstate. Viewstate автоматически используется для хранения состояния страницы, но вы можете явно добавлять и извлекать свои собственные объекты в и из Viewstate программно, если вы решите.

Так что да, наборы данных могут храниться в Viewstate.

1 голос
/ 16 февраля 2009

Первое, что вы должны знать! куки используются сессией ! Сервер знает, кто ваш пользователь, благодаря cookie, который обменивается между клиентом и сервером при каждом запросе (это работает с HTTP-заголовками set-cookie и cookie).

Реальный вопрос:

  • Если вы хотите сохранить информацию о пользователе во время навигации, вам следует использовать сеанс.

  • Если ваш клиент не поддерживает куки-файлы, вы можете хранить куки-файлы в каждом запросе, закодированном в URL (сервер будет использовать URL-адрес вместо куки-файла для поиска нужного сеанса для запроса).

Затем подумайте, где вы хотите сохранить сеанс:
Если ваш сайт должен иметь высокую рассогласованность и высокую производительность, вы не должны хранить сеанс внутри процесса, но внутри базы данных. Таким образом, вы сможете разделить работу между несколькими веб-серверами. Но вы потеряете в простоте (потому что объекты, которые вы храните в своем сеансе, должны быть сериализуемыми), и у вас есть еще один круговой путь между вашим веб-сервером и сервером базы данных.

1 голос
/ 16 февраля 2009

Не следует использовать объект Cache для кэширования данных сеанса, поскольку кеш распределяется между всеми пользователями. Вместо этого вы можете использовать Asp.Net Свойства профиля для хранения ваших данных или добавить обработчик события в событие Session_End и сохранить данные, если пользователь слишком долго покидает компьютер.

0 голосов
/ 05 апреля 2018
  • Cookie - это часть информации, которая используется совместно взаимодействующими частями программного обеспечения путем хранения информации, специфичной для клиента, на клиентском компьютере, а затем извлекается для получения информации о состоянии.

  • выбрал термин " cookie " как " cookie" - это хорошо известный в компьютерной науке термин, который используется при описании непрозрачного фрагмента данных, хранящегося у посредника ». Термин «непрозрачный» здесь подразумевает, что контент представляет интерес и имеет отношение только к серверу, а не к клиенту. Браузер автоматически включает cookie во все последующие запросы к исходному узлу cookie. Файл cookie имеет имя и значение, а также другие атрибуты, такие как домен и путь, срок действия, номер версии и комментарии. для больше

Версия Cookie:

Cookie: cookie-name=cookie-value; Comment=text; Domain=domain-name; Path=path-name; Max-Age=seconds; Version=1; Secure
  • на стороне сервера сеанс данные могут хранить большие данные, а данные на стороне клиента cookie имеют ограниченный размер, отправляемый с веб-сайта на сервер, куки обычно содержат код ссылки этим сохранением размера передачи данных. Сессия закрывается, как только браузер закрывается, но куки существуют дольше. Браузер отправляет идентификатор сеанса на сервер в виде параметра URL, файла cookie или даже заголовков HTTP.

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

0 голосов
/ 01 апреля 2015

Файлы cookie хранятся в браузере в виде текстового файла. Это ограниченный объем данных. Это разрешает только 4kb [4096bytes] . Он не содержит переменную с несколькими переменными. в печенье.

мы можем легко получить доступ к значениям cookie. Так что это менее безопасно . Должна появиться функция setcookie () ДО тега .

Сеансы хранятся на стороне сервера. Он хранит неограниченное количество данных. Он содержит множественную переменную в сеансах. мы не можем легко получить доступ к значениям файлов cookie. Так что это более безопасно .

...