C# 如何在更改为手动机器密钥和通配符cookies ASP.NET MVC 4.5后删除旧cookies

C# 如何在更改为手动机器密钥和通配符cookies ASP.NET MVC 4.5后删除旧cookies,c#,asp.net-mvc,asp.net-mvc-4,cookies,machinekey,C#,Asp.net Mvc,Asp.net Mvc 4,Cookies,Machinekey,如何在更改机器密钥但保留在同一子域后删除ASP.NET中的Cookie 目前我们在example.domain.com上有cookie,但我们需要转移到通配符cookies(.domain.com),以便cookie也能在foo.domain.com上工作。为此,我们手动设置了一个机器密钥来加密/解密asp.net登录cookie。问题是,已经拥有旧cookie的用户现在在尝试访问站点时会收到加密异常(因为它出于某种原因试图解密旧cookie)。我们已经更改了cookie的名称,但它没有帮助-仍

如何在更改机器密钥但保留在同一子域后删除ASP.NET中的Cookie

目前我们在example.domain.com上有cookie,但我们需要转移到通配符cookies(.domain.com),以便cookie也能在foo.domain.com上工作。为此,我们手动设置了一个机器密钥来加密/解密asp.net登录cookie。问题是,已经拥有旧cookie的用户现在在尝试访问站点时会收到加密异常(因为它出于某种原因试图解密旧cookie)。我们已经更改了cookie的名称,但它没有帮助-仍然收到错误。所以我们想删除所有的旧cookie。我们尝试使用以下代码在登录站点上执行此操作:

var myCookies = Request.Cookies.AllKeys;
foreach (var cookieName in myCookies)
{
    var cookie = Request.Cookies[cookieName];
    if (cookie == null) continue;
    cookie.Value = "written " + DateTime.Now;
    cookie.Expires = DateTime.Now.AddYears(-1);
    cookie.Domain = "example.domain.com"
    Response.Cookies.Add(cookie);
}
我们找到了代码并运行了它,但在谷歌chrome资源中检查时,cookie仍然保留着。因此,显然删除操作不起作用。我们尝试了几种不同的方法(添加path=“/”,将cookie.Value设置为cookie.Value等。由于某些奇怪的原因,cookie仍然保留,我们无法删除它们

回到原来的问题,在我们的cookie上更改为通配符域并在web.config中明确说明机器密钥后,我们如何删除ASP.NET MVC 4.5中的cookie?

如果您不一定要使用相同的票证名称,那么如果您更改了FormsAuthentication cookie的名称,您的解决方案应该有效:

<forms name=".YOUR_NEW_COOKIE_NAME" /> **
**

**请注意,我已从显示的标记中省略了其他属性,因此您不想逐字复制/粘贴它。

结果表明,通过删除cookie.Domain,它成功地删除了cookie。我确认这与以下事实有关:为了覆盖cookie,您需要在添加rep时尽可能具体地lacing Cookie。鉴于之前添加的Cookie没有指定域或路径,这是最具体的

在这种情况下,最终起作用的代码是:

var myCookies = Request.Cookies.AllKeys;
foreach (var cookieName in myCookies)
{
    var cookie = Request.Cookies[cookieName];
    if (cookie == null) continue;
    cookie.Value = "written " + DateTime.Now;
    cookie.Expires = DateTime.Now.AddYears(-1);
    Response.Cookies.Add(cookie);
}

感谢您的快速回复。我们没有使用FormsAuthentication。表单使用ajax发布请求,然后用户登录。我们检查许多不同端点的授权,还使用antiforgerytoken,因此仍然需要删除它们,以避免使用错误的machinekey获得解密错误。此外,我仍然很好奇为什么我们不能删除这些饼干。有什么想法吗?@the_Black_Smurf虽然这不是最棒的答案,但Sindre是另一个,所以…我的错误…我错过了那个信息。@Sindre可以修改你的答案,包括你所做的真正有效的事情?如果你这样做,我可以看到你未来的投票结果…@Tisont。当然没有兴!