【问题标题】:Cookie Saves CartId always as nullCookie 将 CartId 始终保存为 null
【发布时间】:2015-11-20 20:09:25
【问题描述】:

所以 cookie 有效,但在生成 GuID 时 CartID 始终保存为 null...可能我应该在第 3 行添加或更改某些内容。我被堆叠了请帮助。这是代码:

    public string GetCartId(HttpContextBase context )
    {

        if (context.Request.Cookies["CartId"] == null) return "0";

        string CartId = context.Request.Cookies["CartId"].Value;
        {               

            if (context.Request.Cookies["CartId"] == null)
             {

                CartId = Guid.NewGuid().ToString();

                HttpCookie cookie = new HttpCookie("CartId", CartId);

                cookie.Expires = DateTime.Now.AddDays(1);


                context.Response.Cookies.Add(cookie);

                return CartId.ToString();
              }

            else   
            {

                return context.Request.Cookies["CartId"].Value;
            }



        }

【问题讨论】:

  • 我需要生成 GuId,以便在 db 表中每个购物车都有一个唯一的 CartId...
  • 旁注:请在发布代码以供公众查看时删除幼儿园级别的 cmets - cmets 中绝对没有任何值,例如 `return cartId;// return cart id"

标签: c# asp.net .net cookies


【解决方案1】:

发生了一些奇怪的逻辑。您的第二个 if-statement 正在执行与第一个相同的检查。但是第一个你已经返回了,所以代码永远不会出现在第二个。

我重写了你的代码以遵循这个逻辑:

  • 如果 cookie 不存在,则创建一个新 id 并将其存储在 cookie 中
  • 返回新创建的 id 或 cookie 中存在的 id

在代码中:

public string GetCartId(HttpContextBase context )
{
    string cartId;
    if (context.Request.Cookies["CartId"] == null)
    {
        cartId = Guid.NewGuid().ToString();
        HttpCookie cookie = new HttpCookie("CartId", cartId);
        cookie.Expires = DateTime.Now.AddDays(1);
        context.Response.Cookies.Add(cookie);
    }
    else 
    {
        cartId = context.Request.Cookies["CartId"].Value;
    }
    return cartId;   
}

【讨论】:

  • 感谢您的回复。我测试了你的代码,cartID 也被保存为 null ......我需要一个唯一的 ID 来保存......所以每个运行购物车的客户都会看到它的购物车 1 天......
  • 对,所以您的请求还没有 cookie。该方法总是在第一条语句上返回。更新了我的答案。
  • 正确。奇怪的是,如果我关闭浏览器并再次打开它,它会显示购物车......但我想用 cookie 做的是每个客户都通过唯一的 CartID 记住购物车......你有什么建议如何实现那个?
  • 不确定你的意思。如果我的回答解决了您的问题,但您还有其他问题,那么您最好创建一个新问题。当然接受我的回答;)。
  • 我想我在捆绑您的解决方案时做错了。好吧,我再次测试了您的代码,它可以工作,但不能作为持久性 cookie。它确实会在设定的时间段后清除 CartId ......但是当我们关闭浏览器并在 cookie 消失后再次打开它时。抱歉,我在写了这么多时间之后,但我尝试了很多方法来找到解决方案,我发现如果只有用户不关闭他的浏览器,你的解决方案就可以工作......如果你有任何建议帮助我:)
【解决方案2】:
HttpCookie c = request.cookies["getcookie"];
If (c == null)
{
c = New httpcookie("getcookie");
Guid g= guid.newguid().tostring();
c.value=g;
Response.cookies.add(c);
Return c.value;
}
else
{
return c.value;
}

希望这是您想要的代码,请忽略区分大小写,因为我是从手机输入的。 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多