【发布时间】:2014-02-12 04:37:42
【问题描述】:
我的电子商务应用程序的购物车页面上的许多会话变量中只有一个以某种方式被破坏。当我将产品与会话 ID 一起添加到购物车时,它会创建一个 order_id(使用一些哈希和盐逻辑)并将其放入会话变量中,当我转到购物车页面时,它会根据 order_id 和会话查询数据库id 来获取购物车中的产品。它第一次获取记录,但是如果我重新加载页面,它会立即获得一个空的 order_id。关于只有一个会话变量是如何被刷新的,我对此很感兴趣。
它只发生在网络服务器上,但在本地主机上完全可以正常工作
我的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。
【问题讨论】:
-
session_start()在每一页上都缺失。 - php.net/manual/de/function.session-start.php -
每个浏览器都有这个问题还是只有 Chrome 才有这个问题?如果它与 chrome 相关,请确保包含 favicon。
-
@Perry 我想到了这一点,但它在 Firefox 中也提供了同样的功能。
-
我们能否看到您包含的用于启动会话的文件的内容?两个页面是否以相同的方式执行相同的文件?
-
@coder101 我们都在问同样的问题,因为最好查看问题中涉及的所有代码。这可能是一个简单的错字——我已经发生过几十次了。我们想帮忙,但如果我们看不到整个事情,我们就无能为力。
标签: php session-variables