这是我如何在我的网站做:
- 设置在IIS上的网站的ASP.NET应用程序池
- 设置绑定主机
your.domain.com
- 注:不能使用
domain.com
或其他子域不会无Cookie
- 在网站上创建一个文件夹
Static
- 安装另一个网站,将其指向之前创建的
Static
文件夹。
- 设置绑定主机
static.domain.com
- 使用一个应用程序池与非托管代码
- 在设置打开会话状态,并检查
Not enabled
。
现在你有一个静态网站。要设置打开Static
文件夹下的文件web.config
并将其替换这一个:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<sessionState mode="Off" />
<pages enableSessionState="false" validateRequest="false" />
<roleManager>
<providers>
<remove name="AspNetWindowsTokenRoleProvider" />
</providers>
</roleManager>
</system.web>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
这将缓存中的文件为30天,除去RoleManager(我不知道这是否改变什么,但我删除了所有我可以找到),并从响应头中删除一个项目。
但是,这是一个问题,即使在部署新版本时,您的内容也会被缓存,所以为了避免这种情况,我为MVC制作了一个辅助方法。基本上你必须追加一些QueryString,每次你改变这些文件时都会改变它。
default.css?v=1 ?v=2 ...
我的MVC方法获取最后写日期和附加的文件网址:
public static string GetContent(this UrlHelper url, string link)
{
link = link.ToLower();
// last write date ticks to hex
var cacheBreaker = Convert.ToString(File.GetLastWriteTimeUtc(url.RequestContext.HttpContext.Request.MapPath(link)).Ticks, 16);
// static folder is in the website folders, but instead of
// www.domain.com/static/default.css I convert to
// static.domain.com/default.css
if (link.StartsWith("~/static", StringComparison.InvariantCultureIgnoreCase))
{
var host = url.RequestContext.HttpContext.Request.Url.Host;
host = String.Format("static.{0}", host.Substring(host.IndexOf('.') + 1));
link = String.Format("http://{0}/{1}", host, link.Substring(9));
// returns the file URL in static domain
return String.Format("{0}?v={1}", link, cacheBreaker);
}
// returns file url in normal domain
return String.Format("{0}?v={1}", url.Content(link), cacheBreaker);
}
,并使用它(MVC3剃刀):
<link href="@Url.GetContent("~/static/default.css")" rel="stylesheet" type="text/css" />
如果您正在使用另一种类似的应用程序,你可以做同样的事情,制作一个在页面上附加HtmlLink的方法。
感谢您的回答,但如前所述,我们已经完成了与您完全相同的操作,并且我们正在获取由ASP.NET设置的Cookie,而不是我们的应用程序。例如,“ASPXANONYMOUS”。 – 2010-06-17 10:56:44
你从任何的HttpHandler服务您的资源,或者你有Global.asax文件在你的cookie的域名? – 2010-06-17 11:01:05
我建议清除浏览器中的所有cookies。只在域上放置少量图像资源,并尝试从HTML页面调用它。我相信这将是无cookie的。 – 2010-06-17 11:05:01