【问题标题】:Session gets emptied on making payment付款时会话被清空
【发布时间】:2013-06-29 19:33:27
【问题描述】:

我正在使用 zen 购物车。我在这里面临一个特殊的问题。每当用户登录时,就会创建一个会话。现在,当用户进入购物车时,将商品添加到购物车并确认所有订单工作正常。但是一旦用户付款,某些会话数据(如 customer_id、customer_type、customer_name 等)就会变为空白,尽管会话没有因为用户没有被注销而被破坏。我不知道究竟是什么问题是。Session_start() 显然是在页面顶部定义的。没有任何域名问题。此外,此代码在localhost 中运行良好。

支付页面上一页代码

<?php
if(strpos(PROJECT_VERSION_MINOR,'2')===0) {
?>
<div class="breadCrumb"><?php echo $breadcrumb->trail(BREAD_CRUMBS_SEPARATOR); ?></div>
<?php } ?>
<h1 id="checkoutPaymentHeading"><?php echo HEADING_TITLE; ?></h1>
<?php echo zen_draw_separator(OTHER_IMAGE_SILVER_SEPARATOR, '100%', '1'); ?>
<?php
$class =& $_SESSION['payment'];
?>
<fieldset id="csNotifications">
<legend><?php echo NAVBAR_TITLE_2; ?></legend>
<p class="main" ><?php echo TEXT_ISECURE_PAYMENT; ?></p>
<div class="main" >
    <?php echo zen_draw_separator(OTHER_IMAGE_SILVER_SEPARATOR, '100%', '1'); ?><br/>
    <?php echo TITLE_CONTINUE_CHECKOUT_PROCEDURE . '&nbsp;' . TEXT_CONTINUE_CHECKOUT_PROCEDURE; ?><br/>
</div>
<table style="width:100%;" class="main" >
<tr>
<td style="text-align:right" class="main">
<?php
  if (isset($_SESSION['payment']->form_action_url)) {
    $form_action_url = $_SESSION['payment']->form_action_url;
  } else {
    $form_action_url = zen_href_link('https://direct.tranzila.com/xmobile/', '', 'SSL');
  }
  $return_url =  zen_href_link(FILENAME_CHECKOUT_PROCESS, 'referer=tranzila', 'SSL');
  echo zen_draw_form('checkout_confirmation', 'https://direct.tranzila.com/xmobile/', 'post');  
  echo 
  zen_draw_hidden_field('currency', '2') . "\n" . 
  zen_draw_hidden_field('sum', $_SESSION['cart']->total) . "\n" . 
  zen_draw_hidden_field('TranzilaToken', $_SESSION['securityToken']) . "\n" . 
  zen_draw_hidden_field('supplier', 'xmobile') . "\n" . 
  zen_draw_hidden_field('myid', '0000000'.$_SESSION['customer_id']) . "\n" . 
  zen_draw_hidden_field('contact', $_SESSION['is_info']['xxxName']) . "\n" . 
  zen_draw_hidden_field('email', $_SESSION['is_info']['xxxEmail']) . "\n" . 
  zen_draw_hidden_field('phone', $_SESSION['is_info']['xxxPhone']) . "\n" . 
  zen_draw_hidden_field('cancel_return', zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL')). "\n" .
  zen_draw_hidden_field('MerchantNumber', $_SESSION['is_info']['MerchantNumber']) . "\n" . 
  zen_draw_hidden_field('language', $_SESSION['is_info']['language']) . "\n" . 
  zen_draw_hidden_field('xxxName', $_SESSION['is_info']['xxxName']) . "\n" . 
  zen_draw_hidden_field('xxxAddress', $_SESSION['is_info']['xxxAddress']) . "\n" . 
  zen_draw_hidden_field('xxxCity', $_SESSION['is_info']['xxxCity']) . "\n" . 
  zen_draw_hidden_field('xxxProvince', $_SESSION['is_info']['xxxProvince']) . "\n" . 
  zen_draw_hidden_field('xxxPostal', $_SESSION['is_info']['xxxPostal']) . "\n" . 
  zen_draw_hidden_field('xxxCountry', $_SESSION['is_info']['xxxCountry']) . "\n" . 
  zen_draw_hidden_field('xxxEmail',  $_SESSION['is_info']['xxxEmail']) . "\n" . 
  zen_draw_hidden_field('xxxVar1', $_SESSION['is_info']['is_order_id']) . "\n" . 
  zen_draw_hidden_field('xxxVar2', $_SESSION['is_info']['xxxVar2']) . "\n" . 
  zen_draw_hidden_field('xxxPhone', $_SESSION['is_info']['xxxPhone']) . "\n" . 
  zen_draw_hidden_field('Products', $_SESSION['is_info']['Products']) . "\n" . 
  zen_draw_hidden_field('ReturnURL', $return_url) . "\n" . 
  zen_draw_hidden_field('cancel_return', zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL')) ;

  echo zen_image_submit(BUTTON_IMAGE_CONTINUE, BUTTON_CONTINUE_ALT) . '</form>' . "\n";
?>
    </td>
  </tr>
</table>
</fieldset>

支付页面代码

<?php
if($_REQUEST['Response'] == '000')
{
$zco_notifier->notify('NOTIFY_HEADER_START_CHECKOUT_PROCESS');
    require(DIR_WS_MODULES . zen_get_module_directory('checkout_process.php'));
$_SESSION['cart']->reset(true);
unset($_SESSION['sendto']);
    unset($_SESSION['billto']);
    unset($_SESSION['shipping']);
    unset($_SESSION['payment']);
    unset($_SESSION['comments']);
    $order_total_modules->clear_posts();
$zco_notifier->notify('NOTIFY_HEADER_END_CHECKOUT_PROCESS');
    zen_redirect(zen_href_link(FILENAME_CHECKOUT_SUCCESS, (isset($_GET['action']) && $_GET['action'] == 'confirm' ? 'action=confirm' : ''), 'SSL'));
}
else
{
    zen_redirect(zen_href_link(FILENAME_PAYMENT_FAIL, (isset($_GET['action']) && $_GET['action'] == 'confirm' ? 'action=confirm&code='.$_REQUEST['Response'] : '&code='.$_REQUEST['Response']), 'SSL'));
    exit;
}
require(DIR_WS_INCLUDES . 'application_bottom.php');

真的是会话行为不端还是其他原因导致了这个错误? 而且我忘了提到会话存储在数据库中。

【问题讨论】:

  • 也许是因为您要取消所有设置?
  • 我回应了'print_r($_SESSION);'在 if 条件之前检查我得到什么值,之后我发布了这个问题。所以它不是关于那些令人不安的东西。
  • 是在付款页面发布后,还是在确认页面后(当 checkout_process 运行时)重置会话变量? (您使用的是什么支付模块?)

标签: php session zen-cart


【解决方案1】:

配置->会话

检查您的设置,尤其是:

重新创建会话(设置为 false)

尝试使用您的设置,看看它如何影响您的会话状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2015-11-17
    • 2021-12-26
    • 1970-01-01
    • 2017-03-01
    • 2017-04-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多