我创建了一个 HttpModule,并使用 Windows Server 2003 在 IIS 6 上运行。我可以向浏览器发送 cookie,但在下一个请求时无法读取它们,cookie 始终为空。
如果我在 IIS 7 上运行这个模块,它工作得很好。 IIS 7 目前不是一个选项,因为我们还没有切换,这需要在此之前完成。
此外,我已经尝试使用 PostAcquireRequestState Hook 。
public void Init(HttpApplication httpApp)
{
httpApp.BeginRequest += OnBeginRequest;
}
public void OnBeginRequest(Object sender, EventArgs e)
{
var httpApp = (HttpApplication)sender;
var context = httpApp.Context;
const string cookieName = "sId";
if (!string.IsNullOrEmpty(context.Request.QueryString["cookie"]))
{
var ck = new HttpCookie(cookieName)
{
Value = httpApp.Context.Request.QueryString["cookie"],
Expires = DateTime.Now.AddDays(1)
};
httpApp.Response.Cookies.Add(ck);
}
else
{
var cookie = httpApp.Request.Cookies[cookieName]
}
}
最佳答案
我遇到了类似的问题,但有不同的解决方案,所以我想我会分享,以防它对某人有帮助。我也采纳了 zengchun 的建议,使用一些工具来检查请求和响应 header 。由于我使用的是 IE,因此 F12 开发工具非常适合此操作。当我看到 cookie 的响应 header 时,我注意到安全标志已设置。果然,我已将代码从生产 SSL 托管站点复制到不使用 SSL 的测试站点,因此 cookie 上的安全标志阻止代码读取它。我更新了 web.config 以从 httpcookies 节点中删除 requireSSL,然后我的网站开始工作。 :)
关于asp.net - HttpModule 在 IIS 6 上未接收 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914921/