如何设计带有访客处理功能的安全购物车?
How to design a secure shopping cart with guest handling?
工作环境:PHP5面向对象,MVC模式,Yii框架
购物车:产品列表,每个产品都有数量和价格。运输车的作用只是把产品放在里面,如果用户要购买物品则:
- 如果客人: register/login
- if member:购物车已发送至验证控制器以尽可能使用所有付款/运输选项验证/更新购物车
思考(优惠券/账单地址、购物地址等)
购物车句柄:
- 添加/删除产品
- 超时 > 从自身清除
购物车未处理:
- 折扣/优惠券
- 所有付款和计费流程
问题是:如何设计既高效又安全?
选项 1
创建 sql table 并存储:
- 来自 session_id()
的 PHPSESSID
- item_id
- 数量
- unit_price
- 日期时间(每次更新购物车时刷新)
在 mysql 上创建一个事件以删除日期时间 > 30 分钟的每一行。
然后要获取购物车,您可以使用当前会话 ID 从 table 中获取所有商品,并创建一个 foreach() 来获取所有商品。
选项 2
将所有购物车信息保存在 cookie 中
在我看来,选项 1 比选项 2 更安全,但会消耗更多资源并可能使 SQL 数据库受到攻击(创建大量新会话使数据库溢出)。
选项 2 会暴露于 cookie 注入,但占用的资源较少,并且会向用户暴露信息。
还有其他/更好的方法吗?
为什么不简单地分配一个包含 quantity
和 item_id
的 $_SESSION["shoppingCart"]
数组?例如:
$_SESSION["shoppingCart"] = array(
$item_id => $quantity
);
然后,在处理购物车时,根据存储的item_id
,调用一个方法从数据库中收集所有需要的数据。然后您可以继续计算实际的购物车价格。
这样,当 $_SESSION
过期时,您不必在数据库中触发任何事件。如果要保存$_SESSION
,也可以将其保存在数据库中。
工作环境:PHP5面向对象,MVC模式,Yii框架
购物车:产品列表,每个产品都有数量和价格。运输车的作用只是把产品放在里面,如果用户要购买物品则:
- 如果客人: register/login
- if member:购物车已发送至验证控制器以尽可能使用所有付款/运输选项验证/更新购物车 思考(优惠券/账单地址、购物地址等)
购物车句柄:
- 添加/删除产品
- 超时 > 从自身清除
购物车未处理:
- 折扣/优惠券
- 所有付款和计费流程
问题是:如何设计既高效又安全?
选项 1
创建 sql table 并存储:
- 来自 session_id() 的 PHPSESSID
- item_id
- 数量
- unit_price
- 日期时间(每次更新购物车时刷新)
在 mysql 上创建一个事件以删除日期时间 > 30 分钟的每一行。
然后要获取购物车,您可以使用当前会话 ID 从 table 中获取所有商品,并创建一个 foreach() 来获取所有商品。
选项 2
将所有购物车信息保存在 cookie 中
在我看来,选项 1 比选项 2 更安全,但会消耗更多资源并可能使 SQL 数据库受到攻击(创建大量新会话使数据库溢出)。 选项 2 会暴露于 cookie 注入,但占用的资源较少,并且会向用户暴露信息。
还有其他/更好的方法吗?
为什么不简单地分配一个包含 quantity
和 item_id
的 $_SESSION["shoppingCart"]
数组?例如:
$_SESSION["shoppingCart"] = array(
$item_id => $quantity
);
然后,在处理购物车时,根据存储的item_id
,调用一个方法从数据库中收集所有需要的数据。然后您可以继续计算实际的购物车价格。
这样,当 $_SESSION
过期时,您不必在数据库中触发任何事件。如果要保存$_SESSION
,也可以将其保存在数据库中。