2012-02-09 83 views
1

我觉得我被饼干怪物吃掉了。我删除了cookies,他们马上回来。就在“GoToPublicHome()”调用之前不会删除的饼干

protected void Page_Load(object sender, EventArgs e) 
    { 
     DeleteCookie("UserId"); 
     DeleteCookie("UserName"); 

     Session.Abandon(); 
     GoToPublicHomePage(); 
    } 

    private void DeleteCookie(string name) 
    { 
     if (Request.Cookies[name] != null) 
     { 
      HttpCookie cookie = new HttpCookie(name); 
      cookie.Expires = DateTime.Now.AddDays(-1); 
      Response.Cookies.Add(cookie); 
     } 
    } 

,我检查Request.Cookies时和用户ID和用户名饼干响应: 在注销,我执行该代码。

在GoToPublicHome调用后立即执行的Global.asax - > Session_Start代码中,它们已经回来了......就像一个坏的便士一样。

+0

看来你有2个问题在这里:为什么它会创建一个新的Cookie?为什么没有设定到期日?这是对的吗。你能否提供更详细的问题? – JScoobyCed 2012-02-09 02:26:18

回答

1

您编写的代码指示.Net创建一个新的HttpCookie,而不是创建“仅当不存在”。 在MSDN页面上有一个示例: http://msdn.microsoft.com/en-us/library/system.web.httpcookie.aspx

+0

我已经大幅修改了代码,但仍然遇到问题。感谢您能给予的任何帮助。 – 2012-02-09 21:21:14

+0

当用户激活“GoToPublicHomePage”操作时,是否与设置Cookie的页面位于相同的上下文中?即:您点击www.example.com/login.html上的登录,然后单击www.example.com/private/index.html上的注销。您需要检查您删除的Cookie的“路径”属性与您设置的Cookie相同的路径 – JScoobyCed 2012-02-11 01:18:34

0

Response.Cookies.Remove(name)

+0

尝试了我能想到的那个和每个变化。直到我将它们放在那里之前,Response并不包含任何cookie。我已经尝试了Request.Cookies.Remove,但是我读的所有内容都指向将过期日期设置为删除它们的方式。重新出现的cookie没有过期日期,因此它们看起来像是sesion cookie而不是域cookie。 – 2012-02-09 21:43:19