php 如何用SESSION 記憶購物車資訊?

我要將商品加入購物車
我想先丟到SESSION去記憶
只是我不懂原理是什麼?
有大神可以幫我解析嗎??
會有商品名稱 圖片 單價 數量 小計
甚至可以移除該商品
丟到SESSION去記憶要怎麼實現?
以往我 SESSION 都是單一值
例如 $_SESSION['abc'] = 'abc';
可以保存多個?且每個都有 key, value

我原本是想說丟到數據庫記憶
但這方法對嗎?

阅读 3.1k
5 个回答

你的做法和想法都是正确的,但具体实现要看业务场景。正常情况下

用户登录状态下加入购物车应当记录同步其他端(存入数据库)
如用户未登录则存在session中
如用户未登录添加的购物车,在用户登录后自动记录到数据库中

关于电商的设计可以看看我的文章
https://segmentfault.com/a/11...

$_SESSION全局变量中可以存储数组
session_start();

$_SESSION['goods'] = [
    'name' => 'goodsname',
    'pic' => 'url',
    'price' => 10.10,
    'num' => 100,
    'summary' => 999.50
];
print_r($_SESSION['goods']);

这样存储的数据在用户关闭浏览器后就消失了,新开浏览器窗口将创建新的会话,之前的会话会在过期时自动销毁

简单点来说,操作SESSION可以视为操作数组一样;
楼主说session保存购物车信息如何操作,demo如下:

// 假如SESSION里的购物车商品保存的是这种数据形式
$_SESSION['cart']['goods'] = [
    'goods_id' => [
        'goods_name' => 'goods_name',
        'price'      => 'price',
        'spec'       => 'spec',
        'num'        => 'num'
    ],
    '1' => [
        'goods_name' => '橙子',
        'price'      => '15.00',
        'spec'       => '脐橙;',
        'num'        => '10'
    ],
    '2' => [
        'goods_name' => '苹果',
        'price'      => '10.00',
        'spec'       => '红苹果;',
        'num'        => '5'
    ]
];

/**
 * 存储商品信息到购物车
 * 1、先取出SESSION购物车里的商品数据
 * 2、生成新的商品数据
 * 3、保存到SESSION
 */
$session_goods = $_SESSION['cart']['goods'];

$session_goods[11] = [
    'goods_name' => 'T恤',
    'price'      => '69.00',
    'spec'       => '颜色:红色;品牌:以纯;',
    'num'        => '1'
];

$_SESSION['cart']['goods'] = $session_goods;


/**
 * 购物车里商品ID为1的商品需要删除
 * 并更新保存到SESSION
 */
unset($goods['1']);
$_SESSION['cart']['goods'] = $goods;
新手上路,请多包涵

购物车一般存在缓存中

session可以存数组的,没登录你就先给他扔session里面,离开页面就消失了;如果登录了你就把他同步到登录的这个人的信息里面

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题