Cache VS Session VS cookie?

Что делать и не делать в Cache VS Session VS Cookies?

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

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

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

В основном я занимаюсь программированием на рабочем столе и чувствую, что мне не хватает знаний, поэтому каждый, кто может расширить доступ к использованию кеша, сессии, куки (или db), будет оценен

Изменить: Из ответов видно, что сочетание БД и файлов cookie - это то, что я хочу.

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

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

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

И спасибо за большие объяснения всем вам!

Ответ 1

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

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

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

Ответ 2

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

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

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

EDIT:

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

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

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

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

Ответ 3

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

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

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

Изменить (добавление пояснений на основе ответа от акитатора):

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

Итак, да, набор данных может быть сохранен в Viewstate.

Ответ 4

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

Ответ 5

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

Настоящий вопрос:

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

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

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

Ответ 6

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

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

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

Ответ 7

  • 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 на стороне клиента ограничен по размеру, отправляемого с веб-сайта на сервер, файлы cookie обычно содержат ссылочный код при сохранении размера передачи данных. Сессия закрывается, как только браузер закрывается, но куки существуют дольше. Браузер отправляет идентификатор сеанса на сервер в виде параметра URL, файла cookie или даже заголовков HTTP.

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