优化Cookie过期代码

时间:2017-08-31 14:32:07

标签: c# asp.net if-statement cookies

我编写了以下代码,以使cookies中的所有request失效。但是随着它们的到期,我需要明确地为某些domain设置cookies属性。我想知道是否有更好的方法来做同样的事情......

protected void Page_Load(object sender, EventArgs e)
{
  Session.Abandon();
  HttpCookie cookie;
  string cookieName;
  int cookieCount = Request.Cookies.Count;

  for (int i = 0; i < cookieCount; i++)
  {
    cookieName = Request.Cookies[i].Name;
    cookie = new HttpCookie(cookieName);
    cookie.Expires = DateTime.Now.AddDays(-1);

    if (string.Compare(cookieName, "cookie1") == 0 
      || string.Compare(cookieName, "cookie2") == 0
      || string.Compare(cookieName, "cookie3") == 0
      || string.Compare(cookieName, "cookie4") == 0)
    {
      cookie.Domain = ".mydomain.com";
    }

    Response.Cookies.Add(cookie);
  }

  Response.Redirect("my redirect link");
}

我是C#的新手,因此不确定是否还有其他更好的方法可以将domain值设置为list cookies的{​​{1}}。我来自脚本编写背景,基本上来自tcl,通常我可以简单地检查给定项目是否在列表中,或者不是:

if ($item in $list){
    // Do something
}

类似于执行lsearch

无论如何,我不喜欢if中的逻辑运算符的原因是因为将来我可能会在cookies中有更多list来执行相同的操作而我不会我想继续填充if条件检查。

我可以像tcl那样执行相同操作,例如拥有所有Cookie名称的list,然后在for循环检查cookie中的list名称{1}},但不确定它有多贵。

任何意见将不胜感激。

1 个答案:

答案 0 :(得分:0)

您使用new HttpCookie创建新Cookie。因此,不会复制现有Cookie的域。你最好更新现有的cookie。例如:Remove and delete all cookies of my ASP NET c-sharp application

从上面的网址复制以下代码:

foreach (string key in Request.Cookies.AllKeys)
{
   HttpCookie c = Request.Cookies(key);
   c.Expires = Now.AddMonths(-1);
   Response.AppendCookie(c);
}

您可以通过将过期日期设置为过去的日期来使Cookie无效。