php+session实现购物车的核心是用二维数组$_session['cart']以商品id为键存储name、price、quantity等必要字段,支持添加(存在则累加数量、否则新建)、更新/删除(按id操作并清理quantity≤0项)、服务端实时计算总价,操作后调用session_write_close()防并发锁。

用 PHP + Session 实现购物车,核心是把用户选中的商品临时存到服务器端的 Session 中,无需登录也能操作,适合中小型电商起步阶段。关键不是存得“多 fancy”,而是结构清晰、增删改查不丢数据、数量更新不混乱、页面刷新后状态一致。
购物车数据怎么存?推荐二维数组结构
Session 里存一个名为 cart 的数组,每个商品用商品 ID(如 product_id)作键,值是一个关联数组,包含 name、price、quantity 等字段。这样查得快、改得准、遍历也方便。
示例结构:
$_SESSION['cart'] = [
101 => ['name' => 'iPhone 15', 'price' => 5999.00, 'quantity' => 2],
205 => ['name' => 'AirPods', 'price' => 1299.00, 'quantity' => 1]
];
- 用数字 ID 当键,避免重复添加同一商品,直接覆盖或累加数量
- 不要把整个商品对象或数据库记录塞进去,只存必要字段,减少 Session 体积
- 价格必须从服务端读取(比如查数据库),不能信任前端传来的 price,防篡改
添加商品:判断是否存在,存在则加数量,否则新建
用户点击“加入购物车”时,接收 product_id,查商品真实信息(名称、价格),再写入 Session。
- 先查数据库确认商品存在且有库存,返回有效数据
- 如果
$_SESSION['cart'][$id]已存在,就$cart[$id]['quantity'] += $add_qty - 如果不存在,就赋值新条目:
$_SESSION['cart'][$id] = [...] - 数量默认为 1,支持传参指定(如“买 3 件”)
修改与删除:按 ID 操作,注意空 cart 的清理
更新数量和删除都基于商品 ID,操作完建议做一次“空项清理”——防止 quantity 被设为 0 后还占着位置。
- 更新数量:直接赋值
$_SESSION['cart'][$id]['quantity'] = $new_qty,小于等于 0 就unset($_SESSION['cart'][$id]) - 删除单个:用
unset($_SESSION['cart'][$id]) - 清空全部:直接
$_SESSION['cart'] = []或unset($_SESSION['cart']) - 每次修改后调用
array_filter($_SESSION['cart'])可自动剔除 quantity ≤ 0 的项(需配合回调)
前端展示与总计:遍历 cart 数组,实时算金额
购物车页面用 foreach 遍历 $_SESSION['cart'],每行渲染商品信息+数量输入框+删除按钮;底部显示总件数和总金额。
- 总金额不要前端算,必须服务端循环累加:
$total += $item['price'] * $item['quantity'] - 表单提交用 POST,带 product_id 和 action(add/update/remove),避免 GET 暴露意图
- 所有操作后跳转回购物车页(或用 AJAX 局部刷新),并加一句
session_write_close()防止并发写锁 - 记得在脚本开头加
session_start(),且确保没有输出(包括空格、BOM)在它之前
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











