的HttpModule不是IIS接收缓存6
我有我创建并使用Windows Server 2003中,我可以送饼干给浏览器,但我不能在下一次请求读取它们在IIS 6正在运行一个HttpModule,cookie是永远空值。的HttpModule不是IIS接收缓存6
如果我运行IIS 7此模块虽然,它工作得很好。因为我们还没有切换,所以IIS 7现在不是一个选项,需要在这之前完成。
而且,我已经尝试过使用PostAcquireRequestState钩。
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]
}
}
可发生在客户端如何请求下一page.you可以使用与Firefox或Fidder酒店工具的萤火虫可以登录您的客户端请求,看看你的代码看起来worked.the问题该请求是否将请求头中的cookd值发送给服务器。
例如
请求头:
get /1.aspx
.....
Cookie: sId=123 [if the client has a cookie then it will appear in here.]
响应头:
Set-Cookie: sId=123; expires=Fri, 30-Mar-2012 07:20:23 GMT;
path=/
如果将服务器添加cookie来的响应,则响应它看起来像以上。
现在,我想这个问题在你的厨师域或您的cookie路径是不同的。
来设置cookie的最好的方法是像如下代码:
var ck = new HttpCookie(cookieName)
{
Value = httpApp.Context.Request.QueryString["cookie"],
Expires = DateTime.Now.AddDays(1),
Path="/",
Domain="your domain"
};
好运。
感谢争春我能找到问题的根源。事实证明,我无法使用对静态文件的请求来设置cookie。我为初始请求创建了.aspx文件,这些文件在设置cookie之后重定向到静态文件。然后,我的HttpModule可以在.aspx文件中设置后读取cookie。不知道为什么我需要一个.aspx文件来设置cookie而不是HttpModule,但是这固定了它。
我遇到了类似的问题,但有一个不同的解决方案,所以我想我会分享,在情况下,它可以帮助别人。我也采取了增春的建议,以便使用一些工具来检查请求&响应标题。由于我使用IE,所以F12开发工具对此非常有用。只要我看到cookie的响应标题,我就注意到了安全标志被设置了。果然,我已经将生产SSL托管站点的代码复制到未使用SSL的测试站点,因此cookie上的安全标志阻止代码读取它。我更新了web.config以从httpcookies节点中删除requireSSL,并且我的网站开始工作。 :)
非常感谢您的帮助。这导致了我的问题的真正根源,我无法通过静态文件请求发送Cookie。我的原始请求需要是.asp或.aspx文件才能设置cookie,然后我的HttpModule可以根据需要读取Cookie。对不起,一开始我就错过了一些信息,我可以发誓服务器实际上是在读取cookie,哈哈。 – James 2012-03-29 14:09:41
你是受欢迎的,我知道你为什么伤心运行IIS7的应用程序是好的。因为你在IIS7中使用集成池。 – zhengchun 2012-03-30 01:51:27