【发布时间】:2013-09-07 15:17:34
【问题描述】:
我在我的实时网站上遇到了一个错误,我在我的开发环境中看不到它,它似乎只发生在 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
- RawSize = 230b
- 路径 = /
- 过期 = 会话
- HttpOnly = HttpOnly
- 值 = 加密
当用户与网站交互时,似乎正在创建购物车 Cookie,但它会不时丢失或丢弃。当我查看 Elmah 错误并查看 HTTP_COOKIE 时,我可以看到所有其他 cookie(我有其他设置的方式与功能相同),但我没有看到购物车 cookie。
由于这个问题,我不得不更改代码以更具防御性。但正如您可以想象的那样,购物车 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
【问题讨论】:
-
Cookie 仅用于会话,您是否正在重定向到另一个站点或服务来处理付款?如果是这样,会话将失效,因此 cookie 消失了....
-
我没有重定向,但我在 iFrame 中托管了一个支付门户,它回调到该站点。但是为什么我的其他会话 cookie 能够存活而这个却没有呢?
-
你的其他 cookie 有多大?,在 chrome 上,我认为总大小只能是 4k。 stackoverflow.com/q/2543851/15710。我不确定 cookie 是存储用户购物车的最佳方式,ASP.Net 有其他方法,例如 Session。
-
不是 cookie 的大小,加起来我所有的 cookie 都不到 1k。我注意到 Chrome 有时会制作两个会话 cookie。每个都有不同的域(我不是通过可能是问题的代码设置域)。一个域名为 www.mysite.com,另一个域名为 .mysite.com。问题可能出在我的 cookie 域值上吗?
-
是的,听起来很像
标签: asp.net-mvc google-chrome cookies