Переменные сеанса и сохранение их в базе данных - PullRequest
2 голосов
/ 25 августа 2011

Итак, я знаю кое-что об этой теме, но мне трудно найти, где и что искать для этого приложения.Я занимаюсь разработкой веб-приложения для веб-форм на c # и asp.net и сохраняю информацию в сессии для каждого пользователя.

Мне просто интересно, когда мне следует приостановить сеанс и любую информацию о сохраняющемся сеансе в базе данных, чтобы к нему можно было получить доступ позже.Переменные изменяются в сеансе на частой основе, и я не хочу, чтобы это влияло на производительность, чтобы каждый раз сохранять эти изменения в базе данных.

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

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

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

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

Например: Вы можете отслеживать товары / товары, которые просматривает пользователь.В следующий раз, когда они посетят, вы можете показать им «Недавно просмотренные товары».Amazon.com использует файлы cookie для этой цели (и многие, многие другие).

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

Обзор файлов cookie ASP.NET

1 голос
/ 25 августа 2011

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

Читая ваш вопрос, я считаю, что это какой-то рабочий процесс , а не данные сеанса .

Состояние сеанса в ASP.NET не предназначено для хранения больших порций данных; это больше для хранения базовых значений, таких как строки, целые числа, направляющие и т. д., и использования таких идентификаторов (, потому что, например, SQLServer, StateServer или пользовательские режимы состояний сеанса сериализуют хранимые объекты и десериализуют их при каждом повторном получении, и очевидно, сложные типы имеют большое влияние на производительность -, отслеживать некоторые виды взаимодействия с пользователем.

Подводя итог, я бы не назвал "потерю производительности" хранящим пользовательское состояние или изменения данных, связанных с пользователем, но использовал бы доступные ресурсы для правильной цели.

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

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

  • Один компьютер будет иметь службу на базе Windows Communication Foundation, реализующую доступ к бизнесу и данным.

  • Один компьютер с приложением ASP.NET Web Forms.

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

1 голос
/ 25 августа 2011

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

У вас есть два варианта: a) увеличить время ожидания сеанса. б) Как предположил Джеймс, сохраняйте важную информацию в cookie-файле, чтобы он не зависел от хранилища сеансов.

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