如何设计一个带客户处理的安全购物车?

时间:2015-01-23 11:06:00

标签: php mysql security yii shopping-cart

工作环境:PHP5面向对象,MVC模式,Yii框架

购物车:每种产品的数量和价格列表。运输车的作用只是将产品放入其中,如果用户想要购买物品,那么:

  • if guest :register / login
  • 如果会员:购物车发送到验证控制器以验证/更新购物车,并提供所有付款/运送选项 想(优惠券/账单地址,购物地址等)

购物车手柄:

  • 添加/删除产品
  • on timeout>自己清楚

购物车无法处理:

  • 折扣/优惠券
  • 所有付款&结算流程

问题是:如何设计它是有效和安全的?

选项1

创建一个sql表并存储:

  • 来自session_id()的PHPSESSID
  • ITEM_ID
  • UNIT_PRICE
  • datetime(每次更新购物车时刷新)

在mysql上创建一个事件,用日期时间>删除每一行。 30分钟。

然后,为了获得购物车,您可以使用当前会话ID从表中获取所有项目,并创建一个foreach()来获取所有项目。

选项2

将所有购物车信息保存在Cookie中


在我看来,选项1比选项2更安全但消耗更多的资源并且可能使SQL数据库暴露于攻击(创建溢出数据库的大量新会话)。 选项2暴露于cookie注入,但需要较少的资源并向用户公开信息。

还有其他/更好的方法吗?

1 个答案:

答案 0 :(得分:5)

为什么不简单地指定一个包含quantityitem_id的{​​{3}}数组?例如:

$_SESSION["shoppingCart"] = array(
   $item_id => $quantity
);

然后,在处理购物车时,调用一个方法,根据存储的item_id从数据库中收集所有必需的数据。然后,您可以继续计算实际的购物车价格。

这样,当$_SESSION到期时,您不必触发数据库中的任何事件。如果要保存$_SESSION,也可以将其保存在数据库中。