好吧,所以我终于回答了我自己的问题。我将首先解决第二个问题,关于在调试模式下运行网站:
Visual Studio将调试到站点http:// localhost:[someport]。因此,如果代码设置为使用cookie.domain为mydomain.com创建cookie,则Cookie不会设置,因为浏览器知道您位于localhost而不是指定的域。为了弥补这一点,我把一个条目放在我的hosts文件中,以便mydomain.com指向127.0.0.1。然后我以调试模式启动了该站点。当网站作为本地主机发布时,我将browswer中的URL更改为http://subdomain.domain.com:[someport]并刷新。现在可以设置cookie。
这样做帮助我追踪我的代码,找到由我的子域网站创建的两个Cookie的问题。我发现,由于cookie.domain,mydomain.com cookie正在创建好(下面的CreateCookie方法)。但是,当我试图更新cookie的过期时(UpdateCookie在下面),它恢复到认为它应该使用子域cookie并继续并在没有找到时创建它。我只需要在设置cookie和更新过期之前再次设置cookie.domain。现在我只有一个cookie。
public void CreateCookie()
{
HttpCookie cookie = new HttpCookie(mConfig.webCookie);
TimeSpan span = new TimeSpan(0, 0, 30, 0);
DateTime time = DateTime.Now; ;
cookie["Username"] = mEncrypt.Encrypt(mUser.Username);
cookie.Domain = "mydomian.com";
cookie.Expires = time + span;
HttpContext.Current.Response.Cookies.Add(cookie);
}
public void UpdateCookie()
{
TimeSpan span = new TimeSpan(0, 0, 30, 0);
DateTime time = DateTime.Now;
HttpCookie cookie = HttpContext.Current.Request.Cookies[mConfig.webCookie];
// without specifying the domain the cookie will be set with the subdomain
cookie.Domain = "mydomain.com";
HttpContext.Current.Response.Cookies.Set(cookie);
HttpContext.Current.Response.Cookies[mConfig.webCookie].Expires = time + span;
}
向我们展示一些实际的代码可能会帮助我们更轻松地诊断问题。 – LukeH 2012-02-15 22:54:00
确实如此,但我不确定哪些代码可能是负责任的,尽管也许创建这两个cookie是某种默认行为。请参阅下面的解决方案 – BeachBum 2012-02-16 15:14:56