每个服务器上的不同 HttpCookie 行为
Different HttpCookie Behavior on each server
在我的应用程序中,一个按钮负责将用户重定向到登录页面,当它在 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("~");
}
现在因为 cookie 没有值,它重定向到登录页面
在 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
似乎不起作用,它只是重定向到根路径
可能是我这边的代码遗漏了什么?
你也可以看看我的浏览器cookies
顺便说一句,更换浏览器没有任何区别
我不确定,但这可能与每个域的 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("~");
}
在我的应用程序中,一个按钮负责将用户重定向到登录页面,当它在 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("~");
}
现在因为 cookie 没有值,它重定向到登录页面
在 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
似乎不起作用,它只是重定向到根路径
可能是我这边的代码遗漏了什么?
你也可以看看我的浏览器cookies
顺便说一句,更换浏览器没有任何区别
我不确定,但这可能与每个域的 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("~");
}