MVC5 Cook ie и та же проблема сайта с chrome - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь построить ECommerce с MVC5 с помощью следующих инструментов: - Visual Studio 2017, Oracle БД 11g, Entity Framework 6, NET Framework 4.6.2, я использую https с пустотой сертификат на тестирование. Я создаю свои собственные куки-файлы внутри приложения, чтобы сохранить выбор пользователя и избранные элементы, я добавляю элементы вручную, удаляя повар ie и помещая новый обновленный после каждого элемента, добавленного или удаленного клиентом, когда-либо все в порядке Firefox, но при попытке просмотреть приложение из Chrome я получил следующее сообщение:

Повар ie, связанный с ресурсом в http://localhost/ был установлен с SameSite=None, но без Secure. Он был заблокирован, так как Chrome теперь доставляет файлы cookie, помеченные SameSite=None, только если они также помечены Secure.

Вот мой кулинар создания ie код:

public HttpCookie CookieWareFromBrowser ()
{
    var ItemsCart = HttpContext.Current.Request.Cookies.Get(Models.StaticModels.CookiesManagedStrings.ItemsCart);    
    if (ItemsCart==null)
    {
        HttpCookie _ItemsCart = new HttpCookie(Models.StaticModels.CookiesManagedStrings.ItemsCart);


        _ItemsCart.Values.Add(Models.StaticModels.CookiesManagedStrings.Items, "|");                                       
        _ItemsCart.Values.Add(Models.StaticModels.CookiesManagedStrings.ItemsCount, "0");

        _ItemsCart.Expires = System.DateTime.Now.AddDays(1);

        HttpContext.Current.Request.Cookies.Set(_ItemsCart);


        HttpContext.Current.Response.SetCookie(_ItemsCart);
        HttpContext.Current.Response.Flush(); 

        return _ItemsCart;
    }
    ItemsCart.Expires = System.DateTime.Now.AddDays(1);

    return ItemsCart;
}

Добавление товара для приготовления ie код:

public IHttpActionResult AddItemToCart(CartItem cartItem)
{
    var _cookie = new CookiesMaster().CookieWareFromBrowser();
    var Cookieitems = CookiesManagedStrings.decryptingCooki(_cookie.Values[CookiesManagedStrings.Items]);
    if (string.IsNullOrEmpty(Cookieitems.Split('|').SingleOrDefault(s => s.Contains(cartItem.Id.ToString()))))

        _cookie.Values[CookiesManagedStrings.Items] = CookiesManagedStrings.encryptingCooki(Cookieitems + cartItem.Id + "," + cartItem.ProductName.Replace(",", "") + "," + cartItem.IValue + "," + cartItem.Quantity + "|");
    else
    {
        var item = Cookieitems.Split('|').Where(s => !string.IsNullOrEmpty(s)).SingleOrDefault(si => si.Contains(cartItem.Id.ToString()));
        var oldQty = int.Parse(item.Substring(item.LastIndexOf(',') + 1));
        var productbalance = _context.storage.Single(p => p.id== cartItem.Id && p.M_LOCATOR_ID == M_ProductManagedStrings.ID).FREE_BALANCE;

        if (productbalance >= oldQty + cartItem.Quantity)
        {
            var newItem = item.Substring(0, item.LastIndexOf(',') + 1) + (oldQty +cartItem.Quantity);

            Cookieitems = string.Join("|", Cookieitems.Split('|').Select(s => s.Replace(item, newItem)));
            _cookie.Values[CookiesManagedStrings.Items] = CookiesManagedStrings.encryptingCooki(Cookieitems);
        }
        else return BadRequest("Item Qty Exceeds Balance");
    }
    int x = 0;
    var v = CookiesManagedStrings.decryptingCooki(_cookie.Values[CookiesManagedStrings.ItemsCount]);
    if (int.TryParse(v, out x))
    {               
        _cookie.Values[CookiesManagedStrings.ItemsCount] = CookiesManagedStrings.encryptingCooki((int.Parse(v) + 1).ToString());
    }
    else
    {
        _cookie.Values[CookiesManagedStrings.ItemsCount] = CookiesManagedStrings.encryptingCooki(0.ToString());
    }
    HttpContext.Current.Response.Cookies.Remove(CookiesManagedStrings.ItemsCart);
    HttpContext.Current.Response.Cookies.Add(_cookie);
    HttpContext.Current.Response.Cookies.Set(_cookie);

    return Ok(_cookie.Values[CookiesManagedStrings.ItemsCount]);
}

1 Ответ

0 голосов
/ 03 апреля 2020

после многих поисков по inte rnet, я нашел два решения A- добавив следующее в ваш web.config, если вы используете .netframe, работа меньше 4.7.2

 <system.web>
<anonymousIdentification cookieRequireSSL="false" />
    <sessionState cookieSameSite="Lax" />
    <roleManager cookieRequireSSL="false" />   
    <authentication mode="None" />
</system.web>

B- если если вы используете. net для работы с рамой выше 4.6.2 вы заполните заполнитель атрибута samesite вашего повара ie одним из следующих вариантов в соответствии с вашей конфигурацией: Strict | Lax | None | Unspecified или вы можете добавить его в свой веб .config следующее:

 <system.web>
  <httpCookies sameSite="[Strict|Lax|None|Unspecified]" requireSSL="[true|false]" />
 <system.web>
...