C# HttpCookie vs Response.Cookie

C# HttpCookie vs Response.Cookie,c#,asp.net,security,cookies,C#,Asp.net,Security,Cookies,各位开发者好 我对在ASP.NET中使用cookies有点陌生,如果这是一个基本问题,我很抱歉。因此,我的web.config中有以下代码,我一直在使用这些代码来了解cookies <httpCookies httpOnlyCookies="true" requireSSL="true"/> 现在,当我使用这段代码创建它时,我得到了UserInfo cookie,以这种方式进行保护 protected void btnSubmit_Click(object sender, Ev

各位开发者好

我对在ASP.NET中使用cookies有点陌生,如果这是一个基本问题,我很抱歉。因此,我的web.config中有以下代码,我一直在使用这些代码来了解cookies

  <httpCookies httpOnlyCookies="true" requireSSL="true"/>
现在,当我使用这段代码创建它时,我得到了UserInfo cookie,以这种方式进行保护

protected void btnSubmit_Click(object sender, EventArgs e)
{
     Response.Cookies["UserInfo"]["userName"] = txtEmail.Text;
}
现在是我的问题。为什么使用“Response.Cookies”默认为使用web.config中的设置?为什么当我使用HttpCookie创建cookie时,我必须通过在CS代码中将其设置为true来保护它?我最好的猜测是,既然我正在创建一个HttpCookie实例,这就是为什么我希望在这方面有进一步的指导

非常感谢

为什么使用“Response.Cookies”默认为使用 web.config

简单/直接的答案是这是设计的

假设调用时cookie不存在

Response.Cookies["UserInfo"]["userName"] = txtEmail.Text;
cookie是为您创建的,并指定了值,但提供了您在中指定的默认值:

<httpCookies httpOnlyCookies="true" requireSSL="true"/>

但是,如果您按照您已经指出的方式进行实例化并将其添加到集合中,它将使用那些手动设置的值,这在
新HttpCookie
的情况下,
安全
属性默认值为false

如Cookies集合中所指定


您也可以近距离地亲自查看的代码,以了解更多的“为什么”。

您确定确实需要此设置吗
Secure
默认为false,是的,但如果web.config这样说,则建议通过SSL传输所有cookie,除非在代码中明确重写。因此,基本上,即使
Secure
最初为false,只要您没有显式运行
Secure=false
,您应该会很好。@Andrei有趣。我不知道为什么,但当我使用HttpCookie创建cookie时,“Secure”并没有显示为true。我想可能是通过HttpCookie创建cookie的原因,因为我正在实例化它,但我不确定是否是这样。确切地说,它不是真的,默认值是假的。但关键是,只要代码没有显式设置
false
,cookie就会安全,因为web.config这么说。
HttpCookie
的实现可能以某种方式检测到显式覆盖
<httpCookies httpOnlyCookies="true" requireSSL="true"/>