如果你去另一个页面,PHP会话是否仍然可用?

时间:2014-02-12 02:29:28

标签: php session

所以我正在尝试修改目前这样工作的系统:

  1. prepayment.php收集客户信息并发布
  2. pay_info.php创建会话并显示有关的更多信息 付款
  3. payment.php显示有关付款的更多信息
  4. creditcardpay.php显示有关付款的更多信息
  5. com_web_process.php将信息发送给银行并将其发布到 https://migs.mastercard.com.au/vpcpay
  6. 然后您跳转到我们服务器中未托管的银行API
  7. 当您完成转移后,银行会将用户返回 我们的服务器中的credit_card_process.php,以及传输 信息。
  8. credit_card_process.php收到收据编号并转移 信息并打印收据及其先前的信息 存储在会话中。
  9. 第一个问题:我不确定这是如何工作的,即使客户被发送到另一台服务器,会话仍然存活?或者它是否留在我们的服务器中,当用户返回时,变量仍然存在? (如果是这样,它如何识别用户?)

    第二名:

    流程太长,客户收到3页我想删除的冗余信息,suprerizing prepayment.php中的所有内容,并将信息发送到com_web_process.php立即处理(删除步骤2-4)

    我可以将信息提供给银行API并且存款工作得非常好。但是当它在文件credit_card_process.php中返回我们的服务器时,它会打印银行生成的信息(收据等),但会话变量(cusotmer的电子邮件,姓名,居住国家)中存储的信息不会显示。

    如果有帮助我可以发布所有文件,或者我认为最相关的部分(会话变量等)

    有趣的是我通过在com_web_process.php中打印变量来测试它们并且它们显示正确,但是当他们去银行并回来时它们会丢失。

    按出现顺序排列的文件:

    pre_payment.php

    form name =“frm_main”action =“pay_info.php?lang =”method =“post”onSubmit =“return validate_register();”

          //customer information
    

    Pay_info.php

    $last_url=$_SERVER['HTTP_REFERER']; //我不确定这是做什么

    $last_name=$_POST["last_name"]; //在变量中获取客户数据(我不明白为什么他们这样做而不是直接发布到会话变量)

    $_SESSION['first_name']=$first_name; //将变量放入会话变量

    form name="frm_main" action="payment.php?lang=<?=$LANG_TYPE?>" method="post"

    input type="hidden" name="first_name" value="<?=$_SESSION['first_name']?>" 
    

    //使用会话变量发布到下一个表单

    payment.php

    $_SESSION["CREDIT_CARD_TRANS"]="YES";稍后会对此进行验证以确保您实际进行交易,在我的新尝试中我在pre_payment中创建了此变量

    $last_name=$_POST["last_name"];获取变量的帖子(必要吗?我们还没有会话吗?)

    <form name="frmMain" action="credit_card_pay.php?lang=<?=$LANG_TYPE?>" method="post" onSubmit="return validatePayment();">
    
     <input type="hidden" name="last_name" value="<?=$last_name?>" />
    

    发送到下一个文件的变量

    credit_card_pay.php

    <input type="hidden" name="vpc_LirtsName" value="<?=$last_name?>" /> this variable last_name is not declared anywhere in the code, I dont know how, why or if its even using it
    
    <form name="frm_main" action="com_web_process.php" method="post"  onsubmit=" return credit_card_validation();">
    

    <input type="hidden" name="reciept_last_name" value="<?=$_POST["reciept_first_name"]?>" />将客户信息发布到下一个文件

    com_web_process.php。

    $_SESSION["CC_FIRST_NAME"]=$_POST["reciept_first_name"]; posting customer info to session variables
    
    <form name="frmMain" action="./PHP_VPC_3Party_DO.php" method="post">
    
    <input type="hidden" name="vpc_ReturnURL" size="63" value="http://www.visaustralia.com/ekey/credit_card_process.php" maxlength="250"/>
    
    <input type="hidden" name="vpc_Amount" value="<?=$_POST["vpc_Amount"]?>" size="20" maxlength="10"/> sending info to the bank file in our server that connects and sends the information to the bank.
    

    credit_card_process.php

    $NAME=$_SESSION["CC_NAME"];
    
    <td width="421" class="formLabel2" style="padding:5px;"><strong><?=$NAME?></strong>
    

    从会话中获取名称并将其打印在收据中

1 个答案:

答案 0 :(得分:0)

1)是的,通过设置具有会话ID的cookie,会话保持活动状态。当你执行session_start时,PHP会查找会话并启动会话,通常靠近页面的开头。我建议命名会话,请参阅session_name()。您可能希望在第1步开始会话。

当银行向用户的浏览器发送重定向并返回您的服务器时,浏览器会发送会话cookie,允许php恢复会话并识别用户。

2)如果你回来时丢失了会话,请确保所设置的cookie的URL与他们被重定向的URL匹配,相同的域名,www等。不太可能但确保cookie设置为足够长的期满(或没有)。检查cookie是登录php还是使用Firefox / Firebug等。如果返回时cookie值不同,你知道你没有重新启动同一个会话但是创建了一个新的空会话。