Php 会话值不会重置

Php 会话值不会重置,php,Php,我使用html、jquery、css和php创建了一个表单。 我定义了session['level'],即每个级别,session['level']的值将加上一,然后包括下一页。 但是,我遇到了一个问题。 如果我刷新页面,会话['level']值保持不变,当我再次单击“new_form”按钮时,其跳过级别。 我想做的是,如果用户刷新页面,它将保持在原来的级别,而不会返回index.php,并且不可能跳过级别。 我怎么做? 非常感谢你的帮助。谢谢 <?php session_sta

我使用html、jquery、css和php创建了一个表单。 我定义了session['level'],即每个级别,session['level']的值将加上一,然后包括下一页。 但是,我遇到了一个问题。 如果我刷新页面,会话['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>


$.validate(); 函数show(){ $('if-1-1')。法代因(800); }
问题在于刷新页面时,
会话
值未保存。您可以在表单中添加隐藏字段,然后重置级别值,但请记住隐藏字段可能被劫持

<?php
    $level = 1;
    if (array_key_exists('level', $_SESSION)) $level = $SESSION['level'];
?>
<input type="hidden" name="level" value="<?php echo $level;?>"/>
编辑:我明白你的意思,最好是使用之前的解决方案,你可以提高级别以防止劫持,但如果你想要快速解决方案,请使用此代码。这是一个丑陋的补丁,但它应该做的把戏

<?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');
            }
        }
    }
?>


但无论如何,您都应该进行其他检查,以查看字段是否正确,它们是否应该通过级别。

您的代码只是假设页面的任何加载都是“转到下一页”操作。因此,任何更新都会向前推进。您需要指出页面加载是如何发生的,并且只在明确请求下一页时才向前移动。e、 g.
,而它们位于
page.php?page=2
。如果他们重新加载,他们只会再次获得第2页。如果他们单击链接,则会前进到第3页
session_start();如果(!empty($_会话['level']){echo$_会话['level'];}
?Marc B我希望url在所有级别都是index.php,因为我在“下一页”按钮中使用了“包含而非链接”按钮。您的表单是如何提交的?您没有“提交”按钮。您需要经常澄清这一点。在什么情况下,您希望推进?在提交时,现在甚至无法进行?developerjk我在其他页面中有提交按钮,我首先使用jquery在index.php中使用buttonThanks隐藏和显示表单。我以前使用过这个按钮,但我注意到正如你所说的,它可能会被黑客攻击,这就是为什么我没有使用hidden Input的原因。考虑到他在表单上甚至没有提交按钮,我认为这个答案有点过早。我理解你知道的,试试另一个技巧,它可能会起作用。如果他们跳过一个级别,然后减去一个级别进入会话。
<?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');
            }
        }
    }
?>