Asp.net mvc MVC5 Cookie和chrome的同一站点问题

Asp.net mvc MVC5 Cookie和chrome的同一站点问题,asp.net-mvc,google-chrome,cookies,asp.net-mvc-5,Asp.net Mvc,Google Chrome,Cookies,Asp.net Mvc 5,我正在尝试使用以下工具使用MVC5构建电子商务: -Visual Studio 2017,Oracle DB 11g,Entity Framework 6,.NET Framework 4.6.2,我正在使用带有无效证书的https进行测试。我在应用程序中创建自己的cookie以保存用户选择和收藏夹项目,我通过删除cookie手动添加项目,并在客户添加或删除每个项目后放置新的更新项目,Firefox上的任何事情都可以,但当我尝试从Chrome查看应用程序时,我收到以下消息: 与位于的资源关联的c

我正在尝试使用以下工具使用MVC5构建电子商务: -Visual Studio 2017,Oracle DB 11g,Entity Framework 6,.NET Framework 4.6.2,我正在使用带有无效证书的https进行测试。我在应用程序中创建自己的cookie以保存用户选择和收藏夹项目,我通过删除cookie手动添加项目,并在客户添加或删除每个项目后放置新的更新项目,Firefox上的任何事情都可以,但当我尝试从Chrome查看应用程序时,我收到以下消息:

与位于的资源关联的cookie设置为
SameSite=None
,但未设置
Secure
。它已被阻止,因为Chrome现在只提供标记为
SameSite=None
的cookie,如果它们也被标记为
Secure

以下是我的创建cookie代码:

公共HttpCookie CookieWareFromBrowser()
{
var ItemsCart=HttpContext.Current.Request.Cookies.Get(Models.StaticModels.CookiesManagedStrings.ItemsCart);
if(ItemsCart==null)
{
HttpCookie _ItemsCart=新的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();
返回_ItemsCart;
}
ItemsCart.Expires=System.DateTime.Now.AddDays(1);
返回项SCART;
}
将项目添加到cookie代码:

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+”);
其他的
{
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=\u context.storage.Single(p=>p.id==cartItem.id&&p.M\u LOCATOR\u id==M\u ProductManagedStrings.id);
如果(productbalance>=旧数量+cartItem.Quantity)
{
var newItem=item.Substring(0,item.LastIndexOf(',')+1)+(oldQty+cartItem.Quantity);
Cookieitems=string.Join(“|”,Cookieitems.Split(“|”)。选择(s=>s.Replace(item,newItem));
_cookie.Values[CookiesManagedString.Items]=CookiesManagedString.encryptingCooki(Cookieitems);
}
否则退货申请(“项目数量超过余额”);
}
int x=0;
var v=CookiesManagedStrings.decryptingCooki(_cookie.Values[CookiesManagedStrings.ItemScont]);
if(内锥巴色(v,外x))
{               
_Values[CookiesManagedStrings.ItemScont]=CookiesManagedStrings.encryptingCooki((int.Parse(v)+1.ToString());
}
其他的
{
_cookie.Values[CookiesManagedStrings.ItemScont]=CookiesManagedStrings.encryptingCooki(0.ToString());
}
HttpContext.Current.Response.Cookies.Remove(CookiesManagedStrings.ItemsCart);
HttpContext.Current.Response.Cookies.Add(_cookie);
HttpContext.Current.Response.Cookies.Set(_cookie);
返回Ok(_cookie.Values[CookiesManagedStrings.ItemsCount]);
}

在互联网上进行了多次搜索之后,我找到了两种解决方案 A-如果使用小于4.7.2的.netframe work,请在web.config中添加以下内容

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

B-如果您使用的.net框架高于4.6.2 根据您的配置,您将通过以下选项之一在cookie中填充属性samesite: 严格|宽松|无|未指定 或者,您可以将以下内容添加到web.config:

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