【问题标题】:SESSION value not passing after redirection to the thank you pageSESSION 值在重定向到感谢页面后未传递
【发布时间】:2014-01-21 02:27:03
【问题描述】:

我正在尝试将$email 字段传递给用户提交查询表单后重定向后出现的感谢页面。

这是一个两步查询表,感谢页面位于最后。

SESSION 似乎在感谢页面上直播,但价值丢失了。我想在感谢页面上将$email 字段发布到 iframe。请让我知道会话 ID 到底哪里出错了?

代码如下:

第 1 步:小型询价表

 <?php 
 error_reporting(0);
 session_start();
 require_once('validation.class.php');
 if(isset($_REQUEST['btnSubmit']) == 'Next'){
 $obj = new validation();
 $obj->add_fields(trim($_POST['txt_fname']), 'req', 'Enter your first name.');
 $obj->add_fields(trim($_POST['txt_contact']), 'req', 'Enter phone number.');
 $obj->add_fields(trim($_POST['txt_finamount']), 'req', 'Enter the amount.');
 $obj->add_fields(trim($_POST['sel_loantype']), 'req', 'Please select vehicle type.');



$error = $obj->validate();



if($error){

            $error_msg =  "".$error."";     

            $_SESSION['error_msgs'] = $error_msg;

            header("location:".$_SERVER['HTTP_REFERER']."");

            exit(); 

}else{



             $_SESSION['form1data'] = $_REQUEST;

             header("location: quick-quote.php");

             exit();



            /*$fname = trim($_REQUEST["txt_fname"]);

            $surname = trim($_REQUEST["txt_surname"]);

            $phone = trim($_REQUEST["txt_contact"]);

            $finamount = trim($_REQUEST['txt_finamount']);

            $sel_loantype = trim($_REQUEST['sel_loantype']);



            $message = '<html><body>';

            $message .= '<table rules="all"  width="100%" style="border:1px solid #666;" cellpadding="10">';

            $message .= "<tr><td><strong>First Name:</strong> </td><td>" . strip_tags($fname) . "</td></tr>";

            if($surname != ''){

            $message .= "<tr><td><strong>Surname:</strong> </td><td>" . strip_tags($surname) . "</td></tr>";

            }

            $message .= "<tr><td><strong>Phone:</strong> </td><td>" . strip_tags($phone) . "</td></tr>";

            $message .= "<tr><td><strong>Amount to Finance:</strong> </td><td>" . strip_tags($finamount) . "</td></tr>";

            $message .= "<tr><td><strong>Loan Type:</strong> </td><td>" . strip_tags($sel_loantype) . "</td></tr>";

            $message .= "</table>";

            $message .= "</body></html>";





            $ToEmail       = 'testemail@gmail.com'; 

            $EmailSubject  = "GET A QUICK QUOTE from ".strip_tags($fname); 

            $mailheader    = "From: ".strip_tags($fname)."\r\n"; 

            //$mailheader   .= "Reply-To: ".$_REQUEST["txt_email"]."\r\n"; 

            $mailheader   .= "Content-type: text/html; charset=iso-8859-1\r\n";

            $MESSAGE_BODY  = $message;



            if(@mail($ToEmail, $EmailSubject, $MESSAGE_BODY, $mailheader)){

                  $_SESSION['sucess'] = "Your message has been sent successfully.";

                  $_SESSION['form1data'] = $_REQUEST;

                  header("location: quick-quote.php");

                  exit; 

            }else{

                  $_SESSION['sucess'] = "Sorry! Your message has not been sent.";

                  $_SESSION['form1data'] = $_REQUEST;

                  header("location: quick-quote.php");

                  exit; 

            }*/

}



 } 



 ?>

第 2 步代码:

 <?php 
 error_reporting(0);
 session_start();
 require_once('validation.class.php');
 ?>
 <script type="text/javascript">
 function submitToCRM()
 {
 $.ajax({
      type: 'POST',
      url: 'http://test.com.au/quick-quote/car-finance/quickquote-one.php',
      data: $("#applynowform").serialize(),
      beforeSend: function () {
                                 $("#loadingimg").show();
                              }, 
      success: function (){
        //alert(data);
         window.location.href = "http://www.test.com.au/thank-you";  
      }
});         

第3步:上面的页面将数据发送到quickquote-one.php表单处理脚本,代码如下。

 <?php
 if(!isset($_SESSION)) 
 { 
  session_start(); 
 } 
 $_SESSION['user_email'] = $_POST['email'];

第 4 步:感谢页面(此页面有以下代码)

 <?php
 if(!isset($_SESSION)) 
 { 
 session_start(); 
 $_SESSION['user_email'] = $_POST['email'];
 echo $_SESSION['user_email'];
 } 
 ?>

【问题讨论】:

  • 在检查isset($_SESSION)之前需要session_start();
  • 不要费心检查最后两页的会话。只需开始您的会话。
  • 您好我已经尝试删除 session_start();从最后两页开始,但是它在重定向后没有将 $email 字段打印到感谢页面?
  • 请注意,第一页数据已经传输到第二页,但在从提交按钮重定向后,它没有从第二页发送到第三页(感谢页面)。
  • 嗨,达贡。我已经有 session_start();在所有 3 个页面中的 isset($_Session) 之前

标签: javascript php jquery


【解决方案1】:

添加

session_set_cookie_params(0);

在你之前

session_start();

您还可以使用 URL 在页面之间传递 SID(会话 ID),以确保它不会在转换过程中丢失。

url: 'http://test.com.au/quick-quote/car-finance/quickquote-one.php?<?php echo htmlspecialchars(SID); ?>',

window.location.href = "http://www.test.com.au/thank-you?<?php echo htmlspecialchars(SID); ?>";  

您正在丢失会话,因为您将浏览器发送到下一个 URL,但没有相对路径,而是完全限定的域。这是一种安全措施,可防止会话 ID 被无意发送到错误的服务器。

另一个小解决方案是使用像/page.php 这样的相对路径而不是http://www.domain.com/page.php

Read more here (PHP Manual)

【讨论】:

  • 嗨,我刚刚删除了相对路径的确切路径,并尝试使用下面的代码打印电子邮件,但它没有带来电子邮件字段。
  • 您需要更改 PHP 主代码的第 5 行。 if(isset($_REQUEST['btnSubmit']) == 'Next'){
  • if(isset($_POST['btnSubmit'])) { 是你应该拥有的
【解决方案2】:

在第 4 步中您的设置

$_SESSION['user_email']

再次。如果表单已刷新,则您的帖子为空,并且您正在使用空值覆盖会话。尝试从第 4 步中删除它,然后离开。

 <?php
 if(isset($_SESSION['user_email']) && !empty($_SESSION['user_email'])) 
 { 
 echo $_SESSION['user_email'];
 } 
 ?>

如果会话未设置,您还试图回显您的会话电子邮件值。如果实际设置了会话,我认为这不会起作用..

【讨论】:

  • 您好,我已完成此更改...为了测试,我正在通过感谢页面上的以下代码打印电子邮件,但它不打印电子邮件。
  • quickquote-one.php 位于何处?这是远程机器上的外部表单处理器吗?
【解决方案3】:

如果所有页面都相互连接,我认为最好在一个页面中启动会话并访问所有会话变量。就像我们创建登录页面一样。当用户登录时,会在会话中捕获所有必需的值,并且即使在刷新后也可以通过应用程序进行访问。

$query = "SELECT Useid,UserName,AccountStatus, FullName FROM Users WHERE UserName = :UserName"; 

从这个查询我们可以很容易地得到会话变量。

 if($login_ok) 
        { 

             //for last visit
            $Month = 2592000 + time(); 
 //this adds 30 days to the current time 
 setcookie(AboutVisit, date("F jS - g:i a"), $Month);
 //last visit ends here.

            $_SESSION['user'] = $row['UserName']; 
            $_SESSION['userid'] = $row['Useid'];
            $_SESSION['fullname'] = $row['FullName'];
            }

只要你需要变量,你就可以像这样使用

$username=$_SESION['user'];

我认为这将有效,而不是每次在每个页面中启动会话。 希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多