2011-04-30 88 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