Chrome丢失了Cookie

时间:2013-09-04 07:56:39

标签: asp.net-mvc google-chrome cookies

我在我的实时网站上收到错误,我在Dev环境中没有看到错误,而且似乎只发生在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

  • Domain = www.foo.com
  • RawSize = 230b
  • 路径= /
  • Expires = Session
  • HttpOnly = HttpOnly
  • 值=加密

当用户与网站进行交互时,似乎正在创建购物车Cookie,但它会不时丢失或丢失。当我查看Elmah错误并查看HTTP_COOKIE时,我可以看到所有其他cookie(我有其他设置方式相同的功能正常)但我没有看到购物车cookie。

由于这个问题,我不得不更改代码以更加防御。但是你可以想象购物车cookie在整个购买过程中被使用,而我在接受付款的时候我已经失败,但是当购物车消失并且没有通知用户成功购买时系统崩溃。幸运的是,我很早就抓住了这个并退还了受影响的用户。

我看到问题的用户代理

  • Mozilla / 5.0(X11; Linux i686)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 29.0.1547.62 Safari / 537.36
  • Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 29.0.1547.57 Safari / 537.36
  • Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 29.0.1547.62 Safari / 537.36

1 个答案:

答案 0 :(得分:2)

让我给你一个解决方案。我已经使用cookie存储了大部分值,并且非常适用于所有浏览器,并且会在特定时间内存储。为此,我已经使用静态类来访问每个地方。

我也在这里编码和解码。但你可以通过删除编码和解码并传递正常来存储它。这是我的代码

这里我把我的类放在静态方法中。我使用机器密钥加密技术将HttpSecureCode与编码和解码结合使用。在这种情况下默认情况下可能不可用。您可以直接输入值。

如果您非常关注使用HttpSecureCode,请使用此link来构建您的课程

public class CookieStore
{
    public static void SetCookie(string key, string value, TimeSpan expires)
    {
        HttpCookie encodedCookie = HttpSecureCookie.Encode(new HttpCookie(key, value));

        if (HttpContext.Current.Request.Cookies[key] != null)
        {
            var cookieOld = HttpContext.Current.Request.Cookies[key];
            cookieOld.Expires = DateTime.Now.Add(expires);
            cookieOld.Value = encodedCookie.Value;
            HttpContext.Current.Response.Cookies.Add(cookieOld);
        }
        else
        {
            encodedCookie.Expires = DateTime.Now.Add(expires);
            HttpContext.Current.Response.Cookies.Add(encodedCookie);
        }
     }
    public static string GetCookie(string key)
    {
        string value = string.Empty;
        HttpCookie cookie = HttpContext.Current.Request.Cookies[key];

        if (cookie != null)
        {
            // For security purpose, we need to encrypt the value.
            HttpCookie decodedCookie = HttpSecureCookie.Decode(cookie);
            value = decodedCookie.Value;
        }
        return value;
    }

}

使用这些可以轻松地在cookie中存储值并在需要时获取值

使用这些方法就像

一样简单

设置Cookie:

CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live

获取Cookie:

string currency= CookieStore.GetCookie("currency");