Хранить идентификаторы между страницами до одного дня? - PullRequest
3 голосов
/ 20 января 2010

Мне нужно хранить идентификаторы (идентификаторы контактов, идентификаторы претензий и т. Д.) Между несколькими страницами .aspx.

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

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

Я не хочу использовать строку запросов. Файлы cookie - это больше идентификаторы пользователей, чем идентификаторы контактов и претензий. Viewstate поддерживается только на странице. Сохранение сеанса в базе данных кажется излишне сложным. Я не хочу слишком сильно увеличивать время ожидания сеанса.

В идеале, я бы хотел, чтобы они могли забрать то, на чем остановились утром.

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

Ответы [ 4 ]

3 голосов
/ 20 января 2010

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

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

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

1 голос
/ 20 января 2010

Как сказал @David, это классическое использование баз данных.

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

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

На самом деле это не очень масштабируемое решение, так как кодировка XML и base64 добавит 50% или более к вашему размеру данных, и, если есть значительные данные (100 КБ), этот процесс может выйти из-под контроля.

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

1 голос
/ 20 января 2010

На самом деле вам может оказаться гораздо проще, чем сложно создать своего рода базу данных «посадочной площадки», в которой хранится история предметов пользователя, или список MRU. Я бы не стал связывать это с их непосредственным сеансом или cookie. Пусть сеанс поддерживает состояние пользователя, пусть база данных обрабатывает, где они находились, когда они возвращались домой или брали этот 7-часовой перерыв на обед.

0 голосов
/ 20 января 2010

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

Вы правы, хранение данных такого типа в сессии не совсем то, для чего они предназначены. Viewstate - лучший механизм для этого.

...