这个cookie的目的是(如果cookie存在)记住CartId,以便匿名或注册的用户可以看到他的购物车。如果cookie不存在,则使用GuId创建一个cookie并将cartId存储一段时间。
我尝试以某种方式在此代码中实现: enter image description here
这里的cookie不起作用。它只保存第190行中的cookie,CartId始终为0,另一个if和else语句未被选中。第190行是我写的,因为它抛出了没有这一行的null异常语句。我认为我犯的一个错误是我没有使用第197行以上的当前上下文。 我试图使用HttpContext.Current,它会抛出此错误: enter image description here
请帮我解决,如果可以修复的话。接受任何其他示例或cookie c#shopping cart的URL。提前谢谢。
首次尝试:
public string GetCartId(HttpContextBase context )
{
if (context.Request.Cookies["CartId"] == null) return "0";
string cartId = context.Request.Cookies["CartId"].Value;
{
// if the cart ID doesn't exist in the cookie, generate
// a new ID
if (context.Request.Cookies["CartId"] == null)
{
// generate a new GUID
cartId = Guid.NewGuid().ToString();
// create the cookie object and set its value
HttpCookie cookie = new HttpCookie("CartId", cartId);
// set the cookie's expiration date
cookie.Expires = DateTime.Now.AddMinutes(2);
// set the cookie on the client's browser
context.Response.Cookies.Add(cookie);
// return the CartID
return cartId.ToString();
}
else // check if the cart ID exists as a cookie
{
// return the id
return cartId;
}
}
}
这里它将cartId保存为null,而不是检查其他语句
第二次尝试我添加了当前上下文:
if (context.Request.Cookies["CartId"] == null)
{
HttpContext context = HttpContext.Current;
用红色加下划线的上下文表示,在此范围内无法声明名为context的本地参数,因为该名称用于封闭的本地范围。
答案 0 :(得分:0)
在MVC控制器中创建cookie:
HttpCookie cookie = new HttpCookie("Cookie");
cookie.Value = "Hello Cookie! CreatedOn: " + DateTime.Now.ToShortTimeString();
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
检查&在MVC控制器中读取cookie:
if (this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("Cookie"))
{
HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["Cookie"];
...
Cookies.AllKeys.Contains()
可以替换您的空检查。
如何调用方法? context 的价值是什么?
可以找到有关Cookie的MSDN文档here...
答案 1 :(得分:0)
在Legacy Asp.net中使用cookie很好,在使用MVC设计模式开发应用程序时,我们还有其他重要的概念来管理状态。
Few are listed below:-
TempData的
可视数据
viewbag
您可以获得解释here
答案 2 :(得分:0)
默认情况下,HttpCookie的HttpOnly属性值为“false”
这意味着您要求浏览器将您的cookie存储在磁盘上
在将Cookie添加到响应之前将其更改为“true”。请注意,如果关闭浏览器的所有实例,客户端cookie将会丢失。
如果这没有帮助,您应该在您的网站上添加隐私政策
试试这个,如果http只是没有用,我们可以选择p3p隐私政策解决方案