使用asp.net core 1.0(mvc)编程商店时,我有以下场景:
当我检查提琴手时,我注意到没有对商店购物篮的各种资源提出要求。
在我的BaseController类中我已经设置了以下代码来禁用缓存:
[NonAction]
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
context.HttpContext.Response.Headers.Add("Cache-Control", "no-store, must-revalidate");
context.HttpContext.Response.Headers.Add("Expires", "0");
context.HttpContext.Response.Headers.Add("Pragma", "no-cache");
await next();
}
有没有人知道我们如何导航回来看到只包含2种产品的最新购物篮?
答案 0 :(得分:3)
你可以使用这段简单的代码:
<head data-page-key="@string.Concat(this.ViewContext.RouteData.Values["controller"], @"_", this.ViewContext.RouteData.Values["action"])"
data-page-token="@DateTime.Now.Ticks.ToString()">
<script type="text/javascript">
var pageKey = document.getElementsByTagName('head')[0].getAttribute("data-page-key");
var pageToken = document.getElementsByTagName('head')[0].getAttribute("data-page-token");
var pageTokenCached = sessionStorage[pageKey];
if (!pageTokenCached || pageTokenCached !== pageToken) sessionStorage.setItem(pageKey, pageToken);
else location.reload();
</script>
浏览器的 sessionStorage 仅存储一个会话的数据。当用户关闭特定浏览器选项卡时,将删除数据。
每次页面来自服务器时,都会生成一个新的数据页面标记值,存储在标记中并保存在浏览器的sessionStorage中。
当用户点击浏览器BACK botton时,将从浏览器缓存中检索html页面并执行。因此,从sessionStorage中检索缓存的令牌,与我们在页面中的内容进行比较,即 data-page-token 。
如果值相等,则表示该页面来自浏览器缓存,否则它是来自服务器的页面。
当 data-page-token 等于 sessionStorage的令牌时,这意味着我们有一个陈旧的页面,因此重新加载,否则将被处理。
会话存储与所有浏览器兼容,并且也受IE 8.0支持