2012-03-28 59 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,並且我的網站開始工作。 :)