我在我的生产环境中遇到一个错误,但是在开发环境中并没有出现,而且似乎只有Chrome浏览器会出现这个问题。我已经找了一些解决方案,但是发现只有Auth cookie会引起问题(事实上,我之前就曾提出关于Chrome和Auth cookie的问题),但这次不同。
我把用户的购物车信息存储在cookie中。设置cookie的代码如下:
HttpCookie responseCookie = HttpContext.Response.Cookies[CartHelper.CART];
responseCookie.PackCartCookie(vm.Cart);
在扩展方法PackCartCookie中,如下设置cookie值
cookie.Value = HttpUtility.UrlEncode(cookieValue);
这导致一个 cookie 被存储,具有以下设置:
- 域名 = www.foo.com
- 原始大小 = 230b
- 路径 = /
- 过期时间 = Session
- HttpOnly = HttpOnly
- 值 = 加密
由于这个问题,我不得不改变代码以更加防御。但是,正如您所想象的那样,购物车 cookie 在整个购买过程中都被使用,我在响应购买时遇到失败,因为购物车消失了,用户没有收到成功购买的通知。幸运的是,我及时发现了这个问题,并退还了受影响的用户。
我看到问题的用户代理:
- Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36
- Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
- Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36