Asp.net mvc 失铬饼干
我在我的实时站点上遇到了一个错误,我在我的开发环境中没有看到这个错误,而且这似乎只发生在Chrome上。我已经四处寻找了一些解决方案,我发现只有Auth cookie存在问题。(事实上,我在过去提出了一个关于chrome和auth cookie的问题),但这是不同的 我将用户购物车存储在cookie中。我把曲奇饼放成这样Asp.net mvc 失铬饼干,asp.net-mvc,google-chrome,cookies,Asp.net Mvc,Google Chrome,Cookies,我在我的实时站点上遇到了一个错误,我在我的开发环境中没有看到这个错误,而且这似乎只发生在Chrome上。我已经四处寻找了一些解决方案,我发现只有Auth cookie存在问题。(事实上,我在过去提出了一个关于chrome和auth cookie的问题),但这是不同的 我将用户购物车存储在cookie中。我把曲奇饼放成这样 HttpCookie responseCookie = HttpContext.Response.Cookies[CartHelper.CART]; responseCooki
HttpCookie responseCookie = HttpContext.Response.Cookies[CartHelper.CART];
responseCookie.PackCartCookie(vm.Cart);
其中扩展方法PackCartCookie设置cookie值,如下所示
cookie.Value = HttpUtility.UrlEncode(cookieValue);
此结果是使用以下设置存储的cookie
- 域名=www.foo.com
- 原始尺寸=230b
- 路径=/
- 过期=会话
- HttpOnly=HttpOnly
- 值=加密
- 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
- 让我给你一个解决方案。我使用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;
}
}
使用这些,您可以轻松地将值存储在cookie中,并在需要时获取值
使用这些方法非常简单
用于设置Cookie:
CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live
string currency= CookieStore.GetCookie("currency");
用于获取Cookie:
CookieStore.SetCookie("currency", "GBP", TimeSpan.FromDays(1)); // here 1 is no of days for cookie to live
string currency= CookieStore.GetCookie("currency");
cookie仅用于会话,您是否重定向到其他站点或服务以处理付款?如果是这样的话,会话将死亡,因此cookie将消失……我没有重定向,但我在一个iFrame中托管了一个支付门户,它将调用该站点。但是为什么我的其他会话cookie能够存活而这个不能存活?你的其他cookie的大小是多少?在chrome上,我认为总大小只能是4k。我不确定cookie是否是存储用户购物车的最佳方式,ASP.Net还有其他方法,例如会话。这不是cookie的大小,加上我所有的cookie都不能构成1k。我注意到Chrome有时会制作我的两个会话cookie。每个都有不同的域(我不是通过代码设置域,这可能是问题所在)。一个域名是www.mysite.com,另一个域名是just.mysite.com。问题可能出在我的cookie域值上吗?是的,听起来很像