无法删除ASP.NET C中的cookie#

时间:2012-04-10 20:23:35

标签: c# asp.net cookies logout

我有一个logout.aspx,在用户点击退出时调用,我想要删除cookie,但它不会这样做...

public partial class LogoutUser : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        HttpCookie cookie;

        cookie = Request.Cookies.Get("Basket");
        if (cookie == null)
        {
            cookie = new HttpCookie("Basket");
        }

        foreach (string item in cookie.Values.AllKeys)
        {
            Response.Cookies[item].Expires = DateTime.Now.AddDays(-1);                
        }

        cookie.Expires = DateTime.Now.AddDays(-1d);
        Response.Cookies["Basket"].Expires = DateTime.Now.AddYears(-1);    
        Session.Abandon();   

        Response.Redirect("~/Default.aspx");
    }
}

cookie将值存储在篮子中,但在注销后我仍然可以访问篮子我不知道什么是错的。

2 个答案:

答案 0 :(得分:5)

Here is some relevant documentation

我相信你的错误在于这一行:

if (cookie == null)

您正在检查null,而不是检查not null。因此,

HttpCookie cookie;

    cookie = Request.Cookies.Get("Basket");
    if (cookie != null)
    {
        cookie = new HttpCookie("Basket");
        cookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(cookie);
    }

    Response.Redirect("~/Default.aspx");

应该这样做。

希望这有用。

答案 1 :(得分:1)

可能是这个吗?

默认情况下会回收已放弃或已过期的会话的会话标识符。也就是说,如果做出包括过期或放弃会话的会话标识符的请求,则使用相同的会话标识符启动新会话。您可以通过将sessionState配置元素的 regenerateExpiredSessionId 属性设置为 true 来禁用此功能。有关更多信息,请参阅会话标识符。

http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx