【问题标题】:HttpCookie vs Response.CookieHttpCookie 与 Response.Cookie
【发布时间】:2016-01-03 16:35:12
【问题描述】:

各位开发者您好,

我对在 ASP.NET 中使用 cookie 有点陌生,如果这是一个基本问题,我深表歉意。因此,我在 web.config 中有以下代码,我正在玩弄这些代码以了解 cookie。

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

现在这是我的问题。我以两种方式创建了一个 cookie(我需要保护它们)。

我保护它的一种方法是使用此代码-

 protected void btnSubmit_Click(object sender, EventArgs e)
    {
        HttpCookie cookie = new HttpCookie("UserInfo");
        cookie.Secure = true; // secure the cookie
        cookie["username"] = txtEmail.Text;

        if (txtEmail.Text != "")
        {
            Response.Cookies.Add(cookie);
        }

        Response.Redirect("WebForm2.aspx");
    }

现在,当我使用此代码创建它时,我得到了 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 的实例,这就是原因,但我想要进一步的方向。

非常感谢!

【问题讨论】:

  • 你确定这个设置真的需要吗? Secure 默认为 false,是的,但 the doc 建议如果 web.config 如此说明,则所有 cookie 都通过 SSL 传输,除非在代码中明确覆盖。所以基本上即使 Secure 最初是错误的,只要你不明确运行 Secure = false 你应该没问题。
  • @Andrei 有趣。我不知道为什么,但是当我使用 HttpCookie 创建 cookie 时,“安全”并没有显示为真的。我想也许通过 HttpCookie 创建 cookie 可能是原因,因为我正在实例化它,但我不确定是否是这种情况。
  • 没错,它不会是真的,默认值是假的。但关键是只要您的代码没有明确设置false,cookie 将是安全的,因为 web.config 是这样说的。 HttpCookie 的实现可能会以某种方式检测显式覆盖

标签: c# asp.net security cookies


【解决方案1】:

为什么使用“Response.Cookies”默认是使用中的设置 web.config?

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

假设您调用时 cookie 不存在

Response.Cookies["UserInfo"]["userName"] = txtEmail.Text;

为您创建 cookie 并为其分配值,但会使用您在中指定的默认值:

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

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

在 Cookie 集合中指定 docs

您也可以近距离接触HttpCookieCollection 的代码,了解更多“为什么”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2010-12-19
    • 2011-11-22
    相关资源
    最近更新 更多