Kev*_*Man 5 cookies asp.net-mvc google-chrome
我在我的实时网站上收到一个错误,我在Dev环境中没有看到这个错误,而且似乎只发生在Chrome上.我已经四处寻找解决方案,我发现只有Auth cookie的问题.(我实际上在过去提出了关于chrome和auth cookie的问题),但这是不同的.
我将用户购物车存放在cookie中.我这样设置了cookie
HttpCookie responseCookie = HttpContext.Response.Cookies[CartHelper.CART];
responseCookie.PackCartCookie(vm.Cart);
Run Code Online (Sandbox Code Playgroud)
扩展方法PackCartCookie设置cookie值的方式如此
cookie.Value = HttpUtility.UrlEncode(cookieValue);
Run Code Online (Sandbox Code Playgroud)
此结果是使用以下设置存储的cookie
当用户与网站进行交互时,似乎正在创建购物车Cookie,但它会不时丢失或丢失.当我查看Elmah错误并查看HTTP_COOKIE时,我可以看到所有其他cookie(我有其他设置方式相同,功能正常)但我没有看到购物车cookie.
由于这个问题,我不得不更改代码以更加防御.但是你可以想象购物车cookie在整个购买过程中被使用,而我在接受付款的时候我已经失败,但是当购物车消失并且没有通知用户成功购买时系统崩溃.幸运的是,我很早就抓住了这个并且退款的用户受到了影响.
我见过这个问题的用户代理
让我给你一个解决方案。我已经使用cookies来存储这里的大部分值,并且在所有浏览器中都非常有效,并且存储在特定的提到的时间。为此,我使用了静态类以便在任何地方都可以访问。
我这里也进行了编码和解码。但您可以通过删除编码和解码并传递正常来存储它。这是我的代码
在这里,我将我的类与静态方法放在一起。我使用HttpSecureCode机器密钥加密技术进行编码和解码。在这种情况下,默认情况下可能不可用。您可以直接输入值。
如果您非常注重使用,HttpSecureCode请使用此链接来构建您的课程
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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用这些,您可以轻松地将值存储在 cookie 中并在需要时获取值
使用这些方法很简单
设置 Cookie:
CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live
Run Code Online (Sandbox Code Playgroud)
获取 Cookie 的方法:
string currency= CookieStore.GetCookie("currency");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3051 次 |
| 最近记录: |