手动删除ASP.NET身份验证cookie

6
我该如何手动删除由子域为asp.net身份验证设置的cookie?
该cookie是在setter.test.com上设置的;
<authentication mode="Forms">
    <forms domain="test.com" loginUrl="Default.aspx" protection="All" path="/" requireSSL="false" timeout="45" name=".ASPXAUTH" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false"/>
</authentication>

在我在getter.test.com应用中,这是我的登出代码(移除该cookie):
public ActionResult LogOut()
{
        //Manually remove the cookie created by 3rd party authentication
            if (Request.Cookies[".ASPXAUTH"] != null)
            {
                HttpCookie myCookie = new HttpCookie(".ASPXAUTH");
                myCookie.Expires = DateTime.Now.AddDays(-1d);
                Response.Cookies.Add(myCookie);
            }
}

这个不起作用。

2个回答

4

只需要做出一个小改变,你就可以开始了。

public ActionResult LogOut()
{
    //Manually remove the cookie created by 3rd party authentication
        if (Request.Cookies[".ASPXAUTH"] != null)
        {
            HttpCookie myCookie = new HttpCookie(".ASPXAUTH");
            myCookie.Expires = DateTime.Now.AddDays(-1d);
            myCookie.Domain = "test.com";
            Response.Cookies.Add(myCookie);
        }
}

您必须确保域名在两个地方都设置为相同的内容。


你需要从配置文件中读取它,或以某种方式确定它。你必须拥有它,你可以尝试从请求 cookie 中获取它... - Mitchel Sellers
根据RFC 6265第4.2.2节:“请注意,不返回cookie属性。特别是,服务器仅通过Cookie头无法确定cookie何时过期,哪些主机有效,哪些路径有效,或者cookie是否使用了Secure或HttpOnly属性。” - HABO

3

由于无论域名如何,您只能拥有一个具有相同名称的cookie,因此我认为建议的方法是:

FormsAuthentication.SignOut();

请查看http://support.microsoft.com/kb/910443


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接