通过使cookie失效而删除cookie

时间:2013-07-15 10:27:12

标签: asp.net-mvc asp.net-mvc-3 cookies setcookie

我有一个我添加到响应中的cookie,但如果已经存在具有相同密钥的cookie,我想删除它,否则我最终得到2个相同密钥的cookie。

我想通过简单地过期cookie将它从浏览器中删除?

HttpCookie cookie = new HttpCookie("UserCookie");
cookie.Value = encTicket;

if (HttpContext.Current.Request.Cookies["UserCookie"] != null)
    ClearCookie("UserCookie");

HttpContext.Current.Response.Cookies.Add(cookie);


private static void ClearCookie(string key)
{
    var httpContext = new HttpContextWrapper(HttpContext.Current);
    var _response = httpContext.Response;

    HttpCookie cookie = new HttpCookie(key)
    {
        Expires = DateTime.Now.AddMonths(-1),
        Value = null
    };

    _response.Cookies.Add(cookie);
}

任何帮助都非常感激。

4 个答案:

答案 0 :(得分:3)

“您不能直接删除用户计算机上的cookie。但是,您可以通过将cookie的过期日期设置为过去日期来指示用户的浏览器删除cookie。下次用户向页面发出请求时设置cookie的域或路径,浏览器将确定cookie已过期并将其删除。“

请阅读以下文章了解更多详情。

http://msdn.microsoft.com/en-us/library/ms178195(v=vs.85).aspx

答案 1 :(得分:1)

以下是我写我的cookie的方式。

protected string CookieSession(Enums.CookieSessionTypes sessionTypes, string cookieValue = "")
    {
        string sessionId = string.Empty;

        var cookie = new HttpCookie(CookieName);

        switch (sessionTypes)
        {
            case Enums.CookieSessionTypes.Add:

                cookie.Values[SessionIdConst] = cookieValue;
                cookie.Expires = DateTime.Now.AddDays(1);
                Response.Cookies.Add(cookie);
                sessionId = cookieValue;

                break;
            case Enums.CookieSessionTypes.Delete:
                cookie.Values[SessionIdConst] = cookieValue;
                cookie.Expires = DateTime.Now.AddDays(-1);
                Response.Cookies.Add(cookie);

                break;
        }


        return sessionId;
    }

试一试,应该工作

答案 2 :(得分:0)

现在我只是选择集合中的最后一个cookie值,虽然我意识到这是一个巨大的黑客攻击。任何更好的建议都非常受欢迎。

string value = "";
for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++)
{
    if (HttpContext.Current.Request.Cookies[i].Name == "UserCookie")
    value = HttpContext.Current.Request.Cookies[i].Value;
}

答案 3 :(得分:0)

我的Cookie未正确到期,因为它的路径设置与实际路径不同,与网址的域名部分不同, Cookie路径区分大小写。解决此问题的唯一方法是在Web服务器或代码中设置机制,以从任何其他URL大小写重定向到区分大小写的规范URL。然后你的cookie将重新开始工作。