2012-03-28 54 views
2

我有我创建并使用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] 
     } 
    } 

回答

1

可发生在客户端如何请求下一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" 
}; 

好运。

+0

非常感谢您的帮助。这导致了我的问题的真正根源,我无法通过静态文件请求发送Cookie。我的原始请求需要是.asp或.aspx文件才能设置cookie,然后我的HttpModule可以根据需要读取Cookie。对不起,一开始我就错过了一些信息,我可以发誓服务器实际上是在读取cookie,哈哈。 – James 2012-03-29 14:09:41

+0

你是受欢迎的,我知道你为什么伤心运行IIS7的应用程序是好的。因为你在IIS7中使用集成池。 – zhengchun 2012-03-30 01:51:27

0

感谢争春我能找到问题的根源。事实证明,我无法使用对静态文件的请求来设置cookie。我为初始请求创建了.aspx文件,这些文件在设置cookie之后重定向到静态文件。然后,我的HttpModule可以在.aspx文件中设置后读取cookie。不知道为什么我需要一个.aspx文件来设置cookie而不是HttpModule,但是这固定了它。

3

我遇到了类似的问题,但有一个不同的解决方案,所以我想我会分享,在情况下,它可以帮助别人。我也采取了增春的建议,以便使用一些工具来检查请求&响应标题。由于我使用IE,所以F12开发工具对此非常有用。只要我看到cookie的响应标题,我就注意到了安全标志被设置了。果然,我已经将生产SSL托管站点的代码复制到未使用SSL的测试站点,因此cookie上的安全标志阻止代码读取它。我更新了web.config以从httpcookies节点中删除requireSSL,并且我的网站开始工作。 :)