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