这个.NET代码片段实际上不会创建cookie,对吗?

时间:2010-05-04 18:26:13

标签: c# asp.net cookies

我刚才意识到这个cookie没有像它应该出现的那样,我检查了不是我写的代码,但我很确定这还不足以创建一个cookie吗?

public static void CreateSSOCookies(string tokenID)
            {
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Domain = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"].ToString().ToLower();
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Value = tokenID.ToString();
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Path = "~/";
                System.Web.HttpContext.Current.Response.Cookies["ssocookies"].Expires = DateTime.Now.AddDays(7);
            }

如果它确实有效,那么cookie在哪里?饼干名称是'ssocookies'吗?

4 个答案:

答案 0 :(得分:4)

我必须承认我不知道,但显然 创建了一个cookie。我测试了它,它有效。

请参阅http://msdn.microsoft.com/en-us/library/78c837bd.aspx

到目前为止,我一直使用new HttpCookie()方法,这对我而言似乎比一个集合神奇地在第一次引用时添加正确名称的cookie。我仍然建议更明确地创建像这样的cookie,特别是在这里看到一些不正确的答案:)

编辑: 路径“〜/”确实可能不是你想要的。使用

// Removed some of the current context stuff for readability
Response.Cookies["ssocookies"].Path = VirtualPathUtility.ToAbsolute("~");

代替。

答案 1 :(得分:3)

我认为大卫在评论这个问题时是正确的,但要扩展他的评论:

“〜/”位特定于ASP.NET,不会解析您期望的路径。因此,实际上正在创建cookie,但由于您将路径设置为无效的路径,因此不会将其返回给您。

例如,如果将路径设置为“/ foo”,则只会在请求中将cookie返回到应用程序中的路径/foo

由于您的应用程序中没有绝对路径等于文字~/,因此不会返回cookie。

答案 2 :(得分:2)

它确实创建了一个cookie。查看反射器,上面的代码称之为:

public HttpCookie this[string name]
{
    get
    {
            return this.Get(name);
    }
}

反过来调用:

public HttpCookie Get(string name)
{
    HttpCookie cookie = (HttpCookie) base.BaseGet(name);
    if ((cookie == null) && (this._response != null))
    {
        cookie = new HttpCookie(name);
        this.AddCookie(cookie, true);
        this._response.OnCookieAdd(cookie);
    }
    return cookie;
}

你可以看到它实际上创建了一个cookie。如果你没有看到它回到请求中,我认为这与你的道路有关。我不确定“〜/”是否有效。

答案 3 :(得分:0)

HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie["Font"] = "Arial";
myCookie["Color"] = "Blue";
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie); //<<<<<<<<<-------------------

http://msdn.microsoft.com/en-us/library/78c837bd(v=VS.80).aspx