Кэширование ASP.NET: хорошо и плохо! Страница показывает старый контент! - PullRequest
0 голосов
/ 05 апреля 2010

У меня есть веб-сайт ASP.NET, где я реализовал кэширование на уровне страницы с помощью директивы OutPutCache. Это повысило производительность страницы. Мои страницы состоят из нескольких частей (некоторые кнопки, ссылки и метки), которые относятся к зарегистрированному пользователю. Если пользователь не вошел в систему, он увидит разные ссылки. Теперь, когда я реализовал кэширование на уровне страницы, даже после того, как пользователь вошел в систему, отображается старое содержимое страницы (ссылки и кнопки, предназначенные для пользователя, не вошедшего в систему). *

Кэширование, очевидно, хорошо. Но как избавиться от этой проблемы? Нужно ли полностью удалять кеширование?

Ответы [ 3 ]

3 голосов
/ 05 апреля 2010

что вам нужно, это частичное кэширование страниц: http://msdn.microsoft.com/en-us/library/ms227429.aspx и http://msdn.microsoft.com/en-us/library/h30h475z.aspx

2 голосов
/ 05 апреля 2010

Я столкнулся с точно такой же проблемой и смог решить ее, используя Response.WriteSubstitution. Просто создайте статический метод, который принимает HttpContext в качестве аргумента, возвращает статус входа в систему в виде строки и визуализирует метод, используя WriteSubstitution:

Response.WriteSubstitution(new HttpResponseSubstitutionCallback(GetLoginStatus));

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

2 голосов
/ 05 апреля 2010

Вы можете использовать директиву VaryByParam:

VaryByParam: этот атрибут позволяет нам контролировать, сколько кэшированных версий страница должна быть создана на основе пары имя / значение, отправленные через HTTP POST / GET. Значением по умолчанию является None. Ничто не подразумевает, что только одна версия страница добавляется в кэш, и все параметры HTTP GET / POST просто игнорируется. Противоположность Ни одно значение не является *. Звездочка подразумевает что все пары имя / значение переданы в должны быть использованы для создания кэшированных версии страницы. Зернистость может контролироваться, однако, путем присвоения имен параметры (несколько имен параметров разделяются точкой с запятой).

Используется как так в директиве страницы

<%@ OutputCache Duration="10800" VaryByParam="State;City" %>

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

РЕДАКТИРОВАТЬ: как упоминалось в комментариях, это не будет работать, если вы используете куки для входа в систему, но некоторые люди используют логин без cookie, который помещает информацию в часть GET / POST.

Подробнее см. здесь

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