FormsAuthentication.设置响应状态码时退出失败
本文关键字:退出 失败 状态 设置 响应 FormsAuthentication | 更新日期: 2023-09-27 18:10:23
. NET mvc控制器动作,我想注册一个用户,并返回401状态码。代码很简单:
public ActionResult Index()
{
FormsAuthentication.SignOut();
HttpContext.Response.StatusCode = 401;
return null;
}
设置状态码时,用户未登出。为什么?如果我删除状态代码行,则用户已注销,但我不想返回200状态。
这是怎么回事?我怎样才能达到我想要的行为?
我是这样解决这个问题的:
if (Request.IsAjaxRequest())
{
FormsAuthentication.SignOut();
Response.StatusCode = 401;
Response.Flush();
return null;
}
else
{
FormsAuthentication.SignOut();
return new HttpUnauthorizedResult();
}
public ActionResult Index()
{
FormsAuthentication.SignOut();
return new HttpUnauthorizedResult();
}
当您设置状态码401(未经授权)时,浏览器没有继续保存您之前使用SignOut()调用设置的cookie。
要完全SignOut,你必须明白你需要给浏览器留出时间来记录cookie(实际上是使用SignOut清除cookie)。
也许一个想法是重定向到一个新页面,并在这个新页面中返回401的状态码。实际上,你可以使用中间页面来完成SignOut和其他SignOut操作,然后重定向到给出消息的最终页面。
您也可以尝试在StatusCode
之前调用Response.Flush();
,以强制浏览器写下SignOut()的cookie