我刚才意识到这个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'吗?
答案 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