我有一个网站询问用户的位置,然后将其存储在cookie中。我想在网站上添加缓存,因此对同一个url / querystring / cookie的任何请求都将首先使用客户端的浏览器缓存。我可以使用varyByCustom
中的outputCacheProfiles
并为服务器上的每个请求创建自定义字符串,从而使服务器缓存成为可能。我找不到任何方法强制用户在用新位置更新cookie后请求每个页面的新版本,而不要求他们在浏览器上点击“刷新”。
如何将Cookie包含为Web浏览器客户端缓存的依赖项?
这是我目前正在做的事情,它适用于在服务器上缓存不同的url / querystring / cookie组合。
web.config中的。
<system.web>
...
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="DefaultCacheProfile" enabled="true" duration="60" varyByCustom="latlon" varyByParam="None" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
在我的页面上使用个人资料...
<%@ OutputCache CacheProfile="DefaultCacheProfile" %>
global.asax.cs中的(CookieSupport
是我读取cookie的内部类)
public override string GetVaryByCustomString(System.Web.HttpContext context, string custom)
{
if (custom.ToLower() == "latlon") {
if (CookieSupport.CookieExists) {
double lon = double.Parse(CookieSupport.CookieValueGet("lon"));
double lat = double.Parse(CookieSupport.CookieValueGet("lat"));
string varystring = string.Format("{0},{1},{2}", Request.QueryString, lat, lon);
return varystring;
} else {
return Request.QueryString.ToString;
}
}
return base.GetVaryByCustomString(context, custom);
}
以下是我创建Cookie的方法......
System.Web.HttpCookie oCookie = new System.Web.HttpCookie(CookieSupport.CookieName);
oCookie.Values.Add("lat", data_Lat.ToString);
oCookie.Values.Add("lon", data_Lng.ToString);
Response.Cookies.Add(oCookie);