Обновление файлов cookie отлично подходит для другого браузера, кроме Google Chrome

#c# #asp.net #cookies #setcookie

#c# #asp.net #файлы cookie #setcookie

Вопрос:

Файлы cookie обновляются нормально во всех браузерах, но в Google Chrome не удается обновить файлы cookie.

Ниже приведен мой код:

 public static string CustomerName
{
    get { return CookieStore.GetCookie("customername"); }
    set { CookieStore.SetCookie("customername", value.ToString(), TimeSpan.FromHours(24), true); }
}

public static void SetCookie(string key, string value, TimeSpan expires, bool http = false)
{
    HttpCookie encodedCookie = new HttpCookie(key, value);
   // encodedCookie.HttpOnly = http;

    if (HttpContext.Current.Request.Cookies[key] != null)
    {
        var cookieOld = HttpContext.Current.Request.Cookies[key];
        cookieOld.Expires = DateTime.Now.Add(expires);
        cookieOld.Value = encodedCookie.Value;
        HttpContext.Current.Response.Cookies.Add(cookieOld);
    }
    else
    {
        encodedCookie.Expires = DateTime.Now.Add(expires);
        HttpContext.Current.Response.Cookies.Add(encodedCookie);
    }
}
  

Ответ №1:

На самом деле проблема обнаружена в функции SetCookie. вам необходимо заменить следующую строку кода

 var cookieOld = HttpContext.Current.Request.Cookies[key];
  

со следующей строкой при обновлении вашего файла cookie.

 var cookieOld = new HttpCookie(key);
  

Ниже приведена полная функция SetCookie.

  public static void SetCookie(string key, string value, TimeSpan expires, bool http = false)
        {
        
            if (HttpContext.Current.Request.Cookies[key] != null)
            {
                
                var cookieOld = new HttpCookie(key);
                cookieOld.Expires = DateTime.Now.Add(expires);
                cookieOld.Value = value;
                HttpContext.Current.Response.Cookies.Add(cookieOld);
            }
            else
            {
                HttpCookie encodedCookie = new HttpCookie(key, value);
                encodedCookie.Expires = DateTime.Now.Add(expires);
                HttpContext.Current.Response.Cookies.Add(encodedCookie);
            }
        }