it-swarm.com.ru

Cache VS Session VS куки?

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

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

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

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

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

Правка: Из ответов кажется, что мне нужна комбинация БД и куки. 

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

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

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

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

61
Stefan

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

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

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

80
Mehrdad Afshari

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

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

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

Правка:

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

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

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

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

4
markom

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

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

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

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

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

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

2
Chris Ballance

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

1
Rune Grimstad

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

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

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

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

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

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

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

0
Premraj

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

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

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

0
Elangovan