如何使用c#删除我的第几个身份验证cookie
本文关键字:几个 身份验证 cookie 何使用 删除 我的 | 更新日期: 2023-09-27 18:14:20
我在Sharepoint 2010中使用基于声明的身份验证自定义登录。用户身份验证工作得很好,但我的自定义登出方法没有。我已经尝试了几种解决方案,但我的身份验证cookie (federation)仍然存在。为什么?
这行不通:
FormsAuthentication.SignOut();
不是这样的:
FederatedAuthentication.SessionAuthenticationModule.SignOut();
FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();
var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
HttpCookie cookie = new HttpCookie(authCookie.Name);
cookie.Expires = DateTime.Now.AddDays(-1d);
cookie.Domain = domain;
Response.Cookies.Add(cookie);
}
如何删除我的FedAuth cookie?我的饼干不持久。然而,唯一的方法来删除我的验证cookie是手动删除它在我的浏览器或关闭它。
我们在使用WIF时遇到了一些麻烦。我不知道你的SharePoint实现是否使用WIF,但是,如果使用,这是一个可能有用的替代方法:
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);
我知道这是一个10年的主题,但最近我也偶然发现了SharePoint Server 2013和ASP完全相同的问题。. NET Framework 4.5
解决我的问题的实际操作几乎与您的上一个代码片段完全相同
var authCookie = Request.Cookies[myCookieName];
if (authCookie != null)
{
HttpCookie cookie = new HttpCookie(authCookie.Name);
cookie.Expires = DateTime.Now.AddDays(-1d);
cookie.Domain = domain;
Response.Cookies.Add(cookie);
}
唯一不同的是我手动确定cookie名称myCookieName
,我从Request.Cookies.AllKeys
中获得列表,然后选择可能包含其名称中的auth的cookie。
不,我没有编码它或其他东西,所以它可以自动选择,我打印出AllKeys
,到Debug.Console()
然后手动选择一个cookie名称,然后将其名称分配给myCookieName
。在我的例子中,负责验证的cookie是FedAuth
。