| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .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 |