Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Где хранить кол-во входящих сообщений


Автор: Ivankult 20.11.2010, 16:22
Есть мастерпейдж. В нем есть label, в котором отображается кол-во входящих сообщений пользователю сайта. Где хранить эту переменную? В куки? Или как глобальную переменную? И когда, в таком случае, обновлять её? Или же при каждом обновлении лезть в БД и смотреть оттуда?

Автор: Экскалупатор 20.11.2010, 16:49
а где хранятся сами сообщения? мне кажется очевидным что если в базе, то имеет смысл просто запрашивать их количество из базы.

Автор: Ivankult 21.11.2010, 03:25
счетчик сообщений находится в мастерпейдже, и при каждой обновлении страницы будет запрос в БД? Это ж лишние нагрузки. Думаю, завести глобальный класс Global.cs со своим пространством имен, туда запилить хэш таблицу. И в ней хранить такую информацию для каждого счетчика, а обновлять её из БД при каждом залогинивании, например. Только вот вопрос в том, как проверить, зная имя пользователя, авторизован он еще, или же покинул сайт(и тогда нет необходимости хранить его в хэше и надо освободить запись). Каким образом это определять?

Автор: Экскалупатор 21.11.2010, 03:40
хм. если после логина пользователя ему кто то напишет? как ты узнаешь что количество сообщений изменилось?

Автор: Ivankult 21.11.2010, 14:50
когда я обрабатываю событи "отправить сообщение" я обновляю кэш. Так же, когда и срабатывает событие "добавить в закладки"(по сайту в профиль).

Так как проверить, зная имя пользователя, авторизован он еще, или же покинул сайт?

Автор: Экскалупатор 21.11.2010, 15:23
по времени последней загрузки страницы или что бы пользователь сам сообщал о своем выходе, но если пользователь просто закроет браузер то он не сможет сообщить что вышел.

Автор: Ivankult 21.11.2010, 15:29
вот об этом я и говорю! неужели нет методов в C# для проверки статуса пользователя(авторизован али покинул сайт)? Что ж тогда просто при каждом обновлении страницы смотреть-есть я(пользователь) в кэше или нет. если меня нет-еще и в кэш добавиться. а в кэше также хранить время последнего обращения в кэш, и если прошел час с последнего обращения-выкинуть из кэша. ну или пол часа. норм решение?

Автор: Экскалупатор 21.11.2010, 16:10
ну да, так и получается, просто сервер не хранит состояние сессии, т.е. пользователь существует для сервера только пока сервер готовит и отправляет пользователю данные.

Автор: jonie 22.11.2010, 09:49
Просто делать запрос к базе каждый раз, в ASP.NET есть методы кеширования прямо на странице, так что запросы будут идти в базу например "раз в 5 минут, но не чаще".
Читать про OutputCache в asp.net и посмотреть доклад http://www.techdays.ru/videos/1190.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)