28.10.2016, Vladimír Klaus, navštíveno 2144x

ASP.NET/C#

Pokud na webu pracujete s dynamickými daty, jako jsou třeba objednávky, rezervace, rychle se měnící počítadla apod., pak jste asi narazili na problém při použití tlačítka Zpět. Na nějaké stránce třeba přidáte věc do košíku nebo na ní jen setrváte delší dobu a když se pak vracíte na stránku předchozí, košík ukazuje předchozí stav nebo je nějaké zboží stále k dispozici, přesto, že už ho někdo zarezervoval.

Důvodem je to, že tlačítko Zpět načítá předchozí stránku z mezipaměti (tedy ve stavu, v jakém byla, když jste z ní odešli), místo toho, aby byla stránka znovu vyžádána ze serveru, tedy co nejaktuálnější. V mnoha případech to pochopitelně nevadí a naopak to velmi zrychluje procházení.

Aby se stránka nebrala z cache, ale vyžádala se na serveru, je třeba toto nějak nastavit do HTTP headeru dané stránky. Protože se stále ještě prohlížeče liší, je třeba k tomu učinit několik kroků, které se tak trochu dublují, ale jsou zatím nezbytné.

//aby se stránka neukládala do vyrovnávací paměti
Response.Cache.SetNoStore();
//aby se nepoužívala stránka z vyrovnávací paměti
Response.Cache.AppendCacheExtension("no-cache");
//aby platnost stránky okamžitě vypršela (pro jistotu)
Response.Expires = 0; 

Zdroje: