2017-08-31 62 views
0

我写了下面的代码到期的所有cookiesrequest。但随着到期他们一起,我需要设置domain属性一些cookies明确的。我不知道是否有更好的方法做同样的...优化cookie过期代码

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值的cookies选择list只。我是从脚本背景,基本上是从tcl,而且通常我可以简单地或检查给定项目列表中的不一样:

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

这类似于执行lsearch

反正,我不喜欢逻辑运算符if的原因是因为在将来,我可能会在listcookies来执行相同的动作,我不想要保持馅if条件检查。

我也许可以在这里做的tcl同样喜欢拥有所有的cookie名称的list,然后在list每个cookie名称for循环检查,但不知道它是多么昂贵。

任何意见,将不胜感激。

+0

看过来:https://stackoverflow.com/questions/31833109/remove-and-delete-all-cookies-of-my-asp-net-c-sharp-application刚刚更新的响应cookie。你不更新cookie,你创建一个新的cookie。 – Niels

+1

太多的饼干难以维护。 ASP.NET有其他机制来保持页面之间的数据。如果您可以告诉我们您想要达到的目标,我们可以为您提供更好的解决方案。 – Win

+0

我正在尝试为我的网站在同一个域上创建单个注销页面。所以我试图删除所有的cookies,基本上是我的会话cookie,这样如果用户退出任何网站,他/她就会退出所有其他子网站。 – Naphstor

回答

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。

+0

我试着按照你的建议做同样的事情,但是如果我查看响应cookie,我会将域值视为空。 – Naphstor