#c# #asp.net-mvc #cookies #httpcookie
#c# #asp.net-mvc #файлы cookie #httpcookie
Вопрос:
В моем приложении кнопка отвечает за перенаправление пользователя на страницу входа в систему, когда она запускается 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
похоже, не работает, и оно просто перенаправляет на корневой путь
Может быть, в кодах моей стороны что-то упущено?
Вы также можете взглянуть на файлы cookie моего браузера
Кстати, смена браузера не имела никакого значения
Я не уверен, но это может быть связано с ограничением файлов cookie на домен.
Как вы видите, в ответе cookie не имеет значения, но когда вы отправляете запрос, значение cooke является тем, что было до выхода из системы
Нет никаких проблем, когда он используется в разных браузерах или разных учетных записях!
Комментарии:
1. ни у кого нет решения!
2. Эта проблема возникает время от времени, и иногда она отлично работает на обоих серверах.
Ответ №1:
Наконец, проблема исчезла, когда код изменился следующим образом:
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("~");
}