2010-08-22 3 views
1

У меня есть страница aspx, которая учитывает каждое посещение и создает файл cookie. Но если я использую страницу OutputCache, то только первый посетитель, который запросил страницу. Как я могу предотвратить эту ошибку?Страница кэша, но число просмотров

директива Page:

<%@ OutputCache Duration="1200" VaryByParam="mode;page;sid;tid" %> 

Codebehind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    //Load single post data 

    #region Hit Counter 
    //hit counter lasts during session 
    if (Session["LastHit" + postId] == null) 
    { 
     cmmnd.CommandText = "UPDATE Posts SET Hits=Hits+1 WHERE [email protected];"; 
     cmmnd.ExecuteNonQuery(); 
     Session["LastHit" + postId] = 1; 
    } 
    #endregion 
} 
+0

Опубликовать код. –

ответ

2

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

2

Что смысл этого рассчитывать? Информация о рынке? Используйте легкий аналитический счетчик из сценария или изображения на странице, не смешиваясь с созданием самой страницы. Ошибка в том, что вы добавляете дополнительную работу к более загруженным запросам, вместо того, чтобы давать дополнительную работу своему собственному запросу.

+0

Просто посчитайте хиты блога. –

+0

В этом случае я бы даже не потрудился с помощью счетчика аналитики, но полагался на разбор журналов IIS. Зачем записывать данные, которые уже записаны? Если вы действительно заботились о том, кто пересматривал полностью кэшированные страницы (а не на кеш-сервере), то вы могли бы использовать трюк с помощью аналитики или использовать такую ​​услугу, как аналитика Google (почему вы должны страдать от головной боли производительности сеансов когда они могут?). –