会话值未重置

时间:2015-12-14 21:59:30

标签: php

我使用html,jquery,css和php创建了一个表单。 我定义了会话['级别'],每个级别,会话['级别']的值将加1,然后包括下一页。 但是,我碰到了一个问题。 如果我刷新页面会话['level']值保持不变,当我再次单击“new_form”按钮时,它会跳过级别。 我想要做的是,如果用户刷新页面,它将保持在他所处的水平,而不是返回到index.php并且不可能跳过级别。 我是怎么做到的 我真的很感谢你的帮助。谢谢!

<?php 
    session_start();
?>
<html>
  <head>
  </head>
  <body>
    <!--The form is here..-->
    <?php
      if (!array_key_exists('level', $_SESSION)) {
          $_SESSION['level']  = 1;
          if(isset($_POST['submit'])) { 
              include ('page2.php');    
          } 
      } elseif ($_SESSION['level'] == 1) {
          $_SESSION['level'] = 2;
          if (isset($_POST['submit'])) {    
              include ('page3.php');    
          }
      }elseif ($_SESSION['level'] == 2) {
          $_SESSION['level'] = 3;
          if (isset($_POST['submit'])) {        
              include ('page4.php');
          }
      } elseif ($_SESSION['level'] == 3) {
        $_SESSION['level'] = 4;
        if (isset($_POST['submit'])) {
            include ('page5.php');
        }
    }
  ?>

  <footer>
    <form action="index.php" method="post">
      <input type="button" name="new_form" class="btn btn-primary btn-new" onclick="show();" /><br>
      <input type="button" class="btn btn-default btn-new" />
    </form>
  </div>

  <img src="footer.png">

  </footer>
  </div>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-form-validator/2.2.8/jquery.form-validator.min.js"></script>
  <script> $.validate(); </script>
  <script>
   function show() {
     $('#if-1-1').fadeIn(800);
   }
   </script>

  </body>
</html>

1 个答案:

答案 0 :(得分:0)

问题是当您刷新页面时,SESSION值未保存。您可以在表单中添加隐藏字段,然后重置级别值,但请记住隐藏字段可能被劫持。

<?php
    $level = 1;
    if (array_key_exists('level', $_SESSION)) $level = $SESSION['level'];
?>
<input type="hidden" name="level" value="<?php echo $level;?>"/>

在您的PHP代码中忘记$SESSION['level']

if (!isset($_POST['level'])) {
        //error
}
else {
    $Savedlevel = $_POST['level'];
    //etc
}

编辑:我知道你的观点,最好使用之前的解决方案,你可以调整级别以防止劫持,但如果你想要快速解决方案,请使用此代码。它是一个丑陋的补丁,但应该可以解决这个问题。

<?php
    if (!array_key_exists('level', $_SESSION)) {
        $_SESSION['level']  = 1;
        if(isset($_POST['submit'])) { 
            include ('page2.php');    
        }
    } else{
        if (!isset($_POST) && $SESSION['level'] > 1) {
          $SESSION['level'] = $SESSION['level'] - 1;
        }

        if ($_SESSION['level'] == 1) {
            $_SESSION['level'] = 2;
            if (isset($_POST['submit'])) {    
                include ('page3.php');    
            }
        }elseif ($_SESSION['level'] == 2) {
            $_SESSION['level'] = 3;
            if (isset($_POST['submit'])) {        
                include ('page4.php');
            }
        } elseif ($_SESSION['level'] == 3) {
            $_SESSION['level'] = 4;
            if (isset($_POST['submit'])) {
                include ('page5.php');
            }
        }
    }
?>

但是你应该做其他检查,看看这些字段是否正确并且它们应该通过该级别。