我电子商务应用程序购物车页面上的许多会话变量中只有一个会以某种方式被破坏。当我将产品与会话ID一起添加到购物车时,它会创建一个order_id(使用一些哈希和盐逻辑)并将其放入会话变量中,当我转到购物车页面时,它会根据order_id和session查询数据库id用于获取购物车中的产品。它第一次获取记录,但如果我重新加载页面,它会立即获取一个空的order_id。我正在研究如何只有一个会话变量被刷新。
它仅在网络服务器上发生,但在localhost上完全正常
我的add_to_cart.php
(会话逻辑)
if(empty($_SESSION['sessid'])){
$_SESSION['sessid'] = session_id();
}
$user_sessid = $_SESSION['sessid'];
$ip = get_ip_address();
if(empty($_SESSION['order_id'])){
$ip = get_ip_address();
$with_time = strtotime("now");
$addsalt = substr(md5($ip.uniqid($with_time,true)),0,15);
$_SESSION['order_id'] = $addsalt;
}
$order_id = $_SESSION['order_id'];
我的cart.php
(仅限会话逻辑)
$user_sessid = $_SESSION['sessid'];
$order_id = $_SESSION['order_id'];
$userid = $_SESSION['user_id'];
if(empty($userid)){
$r_type = 1;
$q1=<<<SQL
select od.ipaddress, od.modified_ts, od.product_id,od.discount,od.quantity,p.id,p.name,p.price, p.img_dir,p.img_name from orders od, products p where od.order_id='$order_id' and od.user_sessid='$user_sessid' and od.product_id = p.id
SQL;
} else {
$r_type = 2;
$q1=<<<SQL
select uc.modified_ts, uc.product_id,uc.discount,uc.quantity,p.id,p.name,p.price, p.img_dir,p.img_name from user_cart uc, products p where uc.userid='$userid' and uc.product_id = p.id
SQL;
}
$r1=$db->query($q1);
$num1 = $r1->num_rows;
当我回复关于立即重新加载购物车页面的查询时,它会变为空order_id
。
我想知道这个奇怪的事情是怎么发生的。请帮忙......
更新我在两个页面上都包含一个文件,其上面有session_start
,因此它解释了正在创建和使用的user_sessid。
答案 0 :(得分:1)
您可能需要将session_start()
添加到文件的顶部。
编辑: 你说你在查询会话ID和订单ID,但你也有
and od.product_id = p.id
在您的查询结束时。这个逻辑在哪里?我猜你正在使用$ _GET请求或类似的东西来确定产品ID。也许这与您的问题有关,可能只是从查询中删除它?您应该只需要为SQL查询使用1个唯一键,尤其是与您正在创建的哈希一样唯一。
答案 1 :(得分:0)
显而易见的一点,但检查你肯定在两个页面上调用session_start()?