2014-01-22 62 views
1

我的电子商务应用程序的购物车页面上的许多会话变量中只有一个会以某种方式被破坏。当我将产品与会话ID一起添加到购物车时,它会创建一个order_id(使用一些散列和盐逻辑),并将其放入会话变量中,当我转到购物车页面时,它会根据order_id和session id来获取购物车中的产品。它第一次获取记录,但之后立即如果我重新加载页面,它会得到一个空的order_id。我正在拉我的头发,以便只有一个会话变量被刷新。会话变量在页面重新加载后为空

它正在发生的事情只有Web服务器上,但工作在本地主机

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; 

当我回应关于立即重新加载购物车页面的查询时, pty order_id

我想知道我的脑袋是如何发生这种奇怪的事情。请帮助...

更新我在包含session_start的页面顶部包含一个文件,因此它解释了正在创建和使用的user_sessid。

+0

每个页面上缺少'session_start()'。 - http://php.net/manual/de/function.session-start.php –

+0

这个问题在每个浏览器中还是仅在Chrome中?如果它与chrome相关,请确保包含favicon。 – Perry

+0

@Perry我想到了这一点,但它也在firefox中提供同样的东西。 – coder101

回答

1

您可能需要将session_start()添加到文件顶部。

编辑: 你说你在查询会话ID和订单ID,但你也有

and od.product_id = p.id 

在查询结束。这个逻辑在哪里?我猜你正在使用$ _GET请求或类似的东西来确定产品ID。也许这与你的问题有关,可能只是将它从查询中删除?您应该只需要为您的SQL查询使用一个唯一键,特别是与您创建的散列一样唯一。

+0

那么,没有进攻,但我知道,我在包含'session_start'的页面上都包含函数文件,这解释了session_id没有清空。 – coder101

+0

@ coder101我不是在想你不知道,我只是没有看到它作为代码的一部分。 – codeaddict

+0

@ coder101参见已编辑的答案 – codeaddict

0

一个显而易见的问题,但请检查你是否在两个页面上都调用session_start()?

+0

请检查我的问题的更新部分。 – coder101

相关问题