ajax请求后丢失会话数据

时间:2017-01-31 07:49:51

标签: php

我有3页我的问题是在Ajax请求后缺少会话数据,我有一个简单的表单,如下面的代码,当我没有点击button1,并提交表单我的代码工作正常,我可以在第3页获得会话值,但如果单击button1并请求Ajax,第3页中缺少会话数据请帮助我做什么? 感谢

page1.php代码

<?php
  session_start();
  if(isset($_POST['firstname']) ){
      $_SESSION['firstname']= $_POST['firstname'];
  } 
  if(isset($_POST['lastname'])){
      $_SESSION['lastname']= $_POST['lastname'];
  } 
?>
<form id="form1" action="page3.php">
    First name:<br>
    <input type="text"  id="firstname" name="firstname" value="">
    <br>
    Last name:<br>
    <input type="text" id="lastname" name="lastname" value="">
    <br><br>
    <input type="submit" value="Submit">
    <br><br>
    <input type="button" id="button1" value="save">
</form> 

<script type="text/javascript">
 $(document).ready(function(){

    $('#button1').on("click",function(){

        jQuery.ajax({
               type: "POST",
               data:  $('#form1').serialize(),
               url:page2.php,
               dataType   : 'json', 
               encode    : true,
               success: function(data){
                console.log(data);
              }
        }); 
    }); 
 });
</script>

page2.php代码

<?php
  session_start();
  $firstname=$_POST['firstname'];
  $lastname=$_POST['lastname'];

    //some code here
?>

page3.php code

<?php
   session_start();
   $firstname=$_SESSION['firstname'];
   $lastname=$_SESSION['lastname'];

    //some code here
 ?>

1 个答案:

答案 0 :(得分:2)

问题在于,当您通过jquery执行此操作时,您的page1未刷新,这就是为什么SESSION保存代码在页面上方没有执行的原因而您没有获得其他值页。

解决方案: -

如果page2.php上的ajax写如下(从page1中删除): -

if(isset($_POST['firstname']) ){ 
  $firstname=$_POST['firstname']; 
  $_SESSION['firstname']=$firstname; 
} if(isset($_POST['lastname'])){ 
  $lastname=$_POST['lastname']; 
  $_SESSION['lastname']= $lastname; 
}

如果使用表单POST,一切正常,因为page1之上的代码将会执行。

但在这种情况下,正确的做法是删除page1之上的代码并将其放在page3.php上(我上面说的相同代码)