问题描述
在我的应用程序上,有一个按钮负责将用户重定向到登录页面,当它在local server
上运行时,一切正常,在调用logout
方法后,它将创建一个空值cookie,然后放在响应中:
public ActionResult logout()
{
HttpContext context = HttpContext.Current;
context.Session.Abandon();
HttpCookie authenticationCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authenticationCookie == null)
authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
authenticationCookie.Value = null;
authenticationCookie.Secure = true;
authenticationCookie.HttpOnly = true;
authenticationCookie.Expires = DateTime.Now.AddDays(-1);
context.Response.Cookies.Add(authenticationCookie);
return Redirect("~");
}
在global.asx中检查身份验证信息
protected void FormsAuthentication_OnAuthenticate(object sender,FormsAuthenticationEventArgs args)
{
SUser user = new SUser();
user.ValidateAuthentication(args);
}
protected void Application_EndRequest(object sender,EventArgs e)
{
SUser.RedirectSsoAuthentication();
}
但是当应用程序在Remote Server
上运行时,logout
似乎无法正常工作,它只是重定向到根路径
可能是我这边的密码遗漏了什么?
顺便说一句,更改浏览器没有任何作用
我不确定,但这可能与每个域的Cookie限制有关。
如您所见,响应cookie没有任何值,但是当您发送请求时,cooke值是注销前的值
在不同的浏览器或不同的帐户上尝试该问题!
解决方法
最后,当代码以以下方式更改时,问题消失了:
public ActionResult Logout()
{
var cookies = HttpContext.Current.Response.Cookies;
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName,"");
cookie.HttpOnly = true;
cookie.Secure =true;
cookie.Domain = "";
cookies.Add(cookie);
HttpContext.Current.Session.Abandon();
return Redirect("~");
}