2011-04-30 87 views
2


我有一個問題與創建的HttpOnly餅乾,我用下面的代碼,以創造新的Cookie:問題用的HttpOnly餅乾

//A.aspx 
    HttpCookie ht = new HttpCookie("www"); 
    ht.Value = "www"; 
    ht.Name = "www"; 
    ht.HttpOnly = true; 
    ht.Expires = DateTime.Now.AddDays(1); 
    Response.AppendCookie(ht); 
    Response.Redirect("B.aspx"); 

    //B.aspx 
    HttpCookie cookie = Request.Cookies["Allowed"]; 
    HttpCookie htt = Request.Cookies["www"]; 
    if (cookie != null) 
    { 
     Response.Write(cookie.HttpOnly); 
     Response.Write(htt.HttpOnly); 
    } 
    else 
    { 
     cookie = new HttpCookie("Allowed"); 
     cookie.HttpOnly = true; 
     cookie.Value = "ping"; 
     cookie.Expires = DateTime.Now.AddMinutes(2); 
     Response.Cookies.Add(cookie); 
     Response.Write(cookie.HttpOnly); 
     Response.Write(htt.HttpOnly); 

    } 

的問題是,最終的結果總是:False,雖然僅Http屬性設置爲True
任何人都可以解釋我一個方法來解決這個問題嗎?
Thanx

回答

4

Cookie參數(過期日期,路徑,HttpOnly等)不會通過瀏覽器發送回服務器,只有值。發回他們只會導致不必要的膨脹。因此Request.Cookies中的cookies將只包含名稱和值。

如果您想查看您的HttpOnly值是否生效,請使用Firecookie或類似的東西來檢查cookie。或者嘗試通過JavaScript訪問它們 - 這就是它應該防止的。

+0

@Matti Virkkunen,但是如果我需要區分httpOnly和我的頁面中的常規cookie,我該怎麼辦?我怎樣才能訪問JavaScript的httpOnly cookie,因爲它是httpOnly?! – 2011-04-30 17:24:07

+1

@Israa:你爲什麼需要在服務器端區分HttpOnly而不是HttpOnly?這沒有任何意義。如果您真的需要這樣做,請在服務器上保留一個HttpOnly的cookie名稱列表,並使用它查找哪個cookie是哪個。 – 2011-04-30 17:41:44

+0

@Matti Virkkunen:我需要這樣做,因爲我會在cookie中保存一個值,並檢查這個cookie是否存在,如果是這樣,頁面將會重新存儲一些數據,因此我需要知道它是否是HttpOnly,因爲任何人都可以使用cookie同名並獲取返回的數據。 – 2011-04-30 19:58:08