0

System.Web.UI.Page oPage我的 cookie 没有被删除。我看了几篇文章,一切看起来都很棒,就在我单步通过 Visual Studio(或只是在 localhost 下运行)以响应单击按钮时,我的 cookie 仍然存在。

不管它值多少钱,我都在使用带有 .Net 4.0 的 Visual Studio 2012。我正在使用默认 IE(Win7/64 上的 v9 以及所有最新更新)在 localhost 上进行调试。

public static void LoginUser(String strEmail, int iId, int iKeepDays)
{
    HttpCookie oCookie = new HttpCookie("myCookie");

    // Set the cookie value.
    oCookie.Secure = false;
    oCookie["Id"] = iId.ToString();
    oCookie["Email"] = strEmail;
    oCookie.Expires = DateTime.Now.AddDays(iKeepDays);

    // Add the cookie.
    HttpContext.Current.Response.Cookies.Add(oCookie);
}

public static void LogoutUser(System.Web.UI.Page oPage)
{
    // Get the cookie.
    HttpCookie oCookie = new HttpCookie("myCookie");
    oCookie = HttpContext.Current.Request.Cookies["myCookie"];
    if (null != oCookie)
    {
        // Remove the cookie.
        cCookies.RemoveCookie("myCookie");

        // Go back to the home page.
        if (oPage.IsCallback)
            ASPxWebControl.RedirectOnCallback("/");
        else
            HttpContext.Current.Response.Redirect("/");
    }
}

/// <summary>
/// This function will be used to remove cookies value 
/// </summary>
/// <param name="key"></param>
public static void RemoveCookie(String key)
{
    //get cookies value 
    HttpCookie oCookie = null;

    if (null != HttpContext.Current.Request.Cookies[key])
    {
        oCookie = HttpContext.Current.Request.Cookies[key];

        // You cannt directly delte cookie you should set its expiry date to earlier date 
        oCookie.Expires = DateTime.Now.AddDays(-1);
        HttpContext.Current.Response.Cookies.Add(oCookie);
    }
}
4

2 回答 2

1

现在答案似乎很明显,因为我正在写它并弄清楚了,但是我可以说答案并不那么容易得到,无论是否明显。

上面的代码在服务器上执行,但是 cookie 的删除发生在客户端。执行必须传输到客户端,然后返回到服务器,以便服务器识别 cookie 已被删除。

我在同一个注销调用中读回数据,只是在不同的函数中。由于公认的做法规定要重置 cookie,因此该函数将 cookie 写回。cookie 被删除,然后又回来了。它甚至有了一个新的文件名。(我打开了隐藏的 cookie 文件夹。)

我的解决方案是将登录状态传递给其他功能。这解决了cookie部分。

于 2013-01-14T21:56:26.137 回答
0

cCookies.RemoveCookie("myCookie");行不会调用您的RemoveCookie方法。该行应该RemoveCookie("myCookie");改为。

于 2013-01-14T21:18:43.957 回答