asp.net-mvc - MVC5 Cookie和chrome相同的站点问题
问题描述
我正在尝试使用以下工具使用 MVC5 构建电子商务:-Visual Studio 2017、Oracle DB 11g、Entity Framework 6、.NET Framework 4.6.2,我正在使用带有无效证书的 https 进行测试。我在应用程序中创建自己的 cookie 以保存用户的选择和收藏项目,我通过删除 cookie 手动添加项目,并在客户添加或删除的每个项目之后放置新的更新的项目,在 Firefox 上一切正常,但是当我尝试从 Chrome 查看应用程序时,我收到以下消息:
与http://localhost/上的资源关联的 cookie设置为带
SameSite=None
但不带Secure
. 它已被阻止,因为 Chrome 现在仅SameSite=None
在它们也被标记时才提供标记的 cookieSecure
。
这是我的创建 cookie 代码:
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;
}
将项目添加到 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 + "|");
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]);
}
解决方案
在互联网上进行多次搜索后,我找到了两个解决方案 A-如果您使用的 .netframe 工作低于 4.7.2,则在您的 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:Strict|Lax|None|Unspecified 或者您可以添加到您的 web.config以下 :
<system.web>
<httpCookies sameSite="[Strict|Lax|None|Unspecified]" requireSSL="[true|false]" />
<system.web>
推荐阅读
- python - divide packet bytes by 255 in python
- javascript - JS Date cannot get the last day of month with 31 days
- sql - How to create an autoincrement ID attribute for a class in Matisse(ODL)?
- java - How to get json from GraphQL
- asp.net - 如何使用 asp.net 获取 Authorization_code 和 access_Token 并发送信封 DocuSign
- python - How to use Raise a value error when calculating derivatives using numpy
- api - Heroku logs drop error nodemon: not found
- python - 通过递归 CTE 使用 SQLAlchemy 获取层次结构的顶级父 ID
- json - Updating a specific JSON Object's key-value dynamically with REST API in Angular 10
- flutter - snapshot.data is NULL flutter