如果发现cookie,获取数据,否则创建cookie,这是一个好逻辑吗?

时间:2010-03-16 21:25:59

标签: c# asp.net-mvc cookies

我有一个Action基本上将一个项目添加到购物车,购物车的唯一方法是检查cookie,这是逻辑流程,如果您发现任何问题,请告诉我......

通过GET

调用

/ order / add / [id]

动作检查cookie,如果没有找到cookie,它会生成一个新的购物车,将标识符写入cookie,然后将该项添加到数据库中,并与创建的购物车相关联

如果找到了cookie,它会从cookie中获取购物车标识符,获取购物车对象,将项目添加到数据库中,并与找到的购物车相关联

所以它基本上就像......

action add(int id){

if(cookie is there)
    cart = getcart(cookievalue)
else
    cart = makecart()
    createcookie(cart.id)

additemtocart(cart.id, id)

return "success";
}
好像对吗?我不能用另一种有意义的方式。

3 个答案:

答案 0 :(得分:1)

对我来说没问题。

  通过GET

调用

/ order / add / [id]

1)购物车还不是订单,但这只是术语。

2)最好使用POST(PUT)来修改数据。

3)将临时购物车存放在数据库中时,不要忘记安排一些清理服务来清除旧的废弃购物车。

答案 1 :(得分:1)

您的逻辑看起来不错,但我会考虑您是否需要将购物车内容存储在数据库中。除非你有充分的理由我只是想把它添加到会话中。

我还将研究为购物车对象创建自定义模型绑定器,该绑定器将传入新的购物车实例或从访问者cookie实例化的实例。这样你的控制器就会变得更简单,例如:

public ActionResult Add(Cart cart, int id)
{
    AddItemToCart(cart, id);
    return View();
}

此外,在RESTful应用程序中,理想情况下应使用POST方法添加到购物车中。

答案 2 :(得分:0)

关于(唯一)我能想到的事情是你是否需要在数据库中存储任何东西。

如果您允许人们在一台计算机上浏览然后从另一台计算机上签出,那么您需要将所选项目存储在数据库中。

如果您不允许,那么您可以保留在cookie中选择的项目,从而节省数据库之旅。