Разное поведение HttpCookie на каждом сервере

#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("~");

}