2015-11-19 1 views
0

Il y avait un problème étrange hier à propos de sortie de l'asp.net (webforms). Nous utilisions la mise en cache au niveau de la page (pas la mise en cache partielle) pour un site multilingue (la langue est déterminée via la clé querystring) et dans certains cas, la mise en cache a cessé de fonctionner pour certaines langues. J'ai gardé la trace de la méthode du fichier Global.asax mais, cela n'a pas fonctionné. Je donnerai plus de détails dans la réponse ...Outputcaching ne fonctionne pas avec les cookies

Répondre

0

Merci à subversion, j'ai gardé la trace des commits récents. Nous avons créé un mécanisme permettant à des utilisateurs spécifiques d'afficher certaines langues qui n'ont pas encore été publiées, en utilisant des cookies au lieu de variables de session. C'était la cause du problème. Si une requête arrive à une langue qui n'est pas la langue par défaut, ce mécanisme vérifie si elle doit permettre à l'utilisateur d'afficher la page. Et à mon humble avis si vous modifiez la collection de cookies de la réponse , asp.net désactive outputcache pour cette demande. Je l'ai testé et il désactive vraiment le cache si vous ajoutez un cookie à réponse.

+0

OutputCache de Asp.net est pas un module très bien documenté. Il y a de tels senarios cela pourrait ne pas fonctionner. Faites attention à l'événement que vous utilisez, par exemple, les publications peuvent ne pas fonctionner, le cache peut ne pas varier et ainsi de suite ... –

1

Peut-être que vous devez définir l'attribut partageable sur vos cookies à true?

Si une donnée HttpResponse contient un ou plusieurs cookies sortants avec partageable est définie sur false (la valeur par défaut), la mise en cache de sortie sera supprimée pour la réponse. Cela empêche les cookies contenant des informations potentiellement sensibles d'être mis en cache dans la réponse et envoyés à plusieurs clients. Pour permettre la mise en cache d'une réponse contenant des cookies , configurez la mise en cache normalement pour la réponse, par exemple à l'aide de la directive OutputCache ou de l'attribut [OutputCache] de MVC, et définissez tous les cookies sortants pour que Shareable soit défini sur true.

https://msdn.microsoft.com/en-us/library/system.web.httpcookie.shareable(v=vs.110).aspx