【问题标题】:Session variable empty after page reload页面重新加载后会话变量为空
【发布时间】: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


【解决方案1】:

您可能需要在文件顶部添加session_start()

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

and od.product_id = p.id 

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

【讨论】:

  • 好吧,没有冒犯,但我知道这一点,我在两个页面上都包含了函数文件,上面有 session_start 并解释了 session_id 没有清空。
  • @coder101 我没想到你不知道,我只是没有把它看作代码的一部分。
  • and od.product_id = p.id 用于对获取的结果中的产品进行分组,我只是将两个表与 product_id 连接起来,因此这部分。但是你如何解释只有一个会话变量被破坏,而不是全部被破坏
【解决方案2】:

很明显的一点,但检查一下你肯定在两个页面上都调用了 session_start() 吗?

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多