PHP返回上一页时丢失会话变量

sar*_*bee 2 php session-variables

我网站上的主页有一个包含两个字段的表单:Make of the Car(carmake)和Car Model(carmodel).提交后,它会将用户带到第二页,显示有关用户在主页上输入的特定品牌和型号的信息.

我使用post-method将变量传递给第二页,在那里我用两个变量开始一个新的会话:

    <?php 
       session_start(); 
       $_SESSION['carmake']=$_POST['carmake'];
       $_SESSION['carmodel']=$_POST['carmodel'];
    ?>
Run Code Online (Sandbox Code Playgroud)

这很好用.在第2页,我有一个第3页的链接,它使用相同的两个会话变量.因此,在第3页,我使用会话功能启动页面,并且会话变量可供使用.到目前为止没问题.

从这一点开始,我遇到了两个问题:

问题1:我在第3页上有一个链接回第2页的按钮.当我使用此按钮返回第2页时,第2页不会回显会话变量.但是,如果我使用浏览器"后退"按钮返回第二页,我会被要求"确认重新提交",然后第二页正确回显会话变量.

我的问题1:如何在不丢失会话变量的情况下设计导航到以前访问过的页面?

问题2:有没有办法避免在先前访问过的使用会话变量的页面上"确认重新提交"(当使用浏览器后退按钮时)?

(我是这里的新手,并提前为长篇文章道歉,这可能是一个非常简单的问题.)

小智 6

问题1解决方案:

改变你的代码

<?php 
       session_start(); 
       $_SESSION['carmake']=$_POST['carmake'];
       $_SESSION['carmodel']=$_POST['carmodel'];
Run Code Online (Sandbox Code Playgroud)

<?php 
       session_start(); 

       if(isset($_POST['carmake']))
            $_SESSION['carmake']=$_POST['carmake'];

       if(isset($_POST['carmodel']))
            $_SESSION['carmodel']=$_POST['carmodel'];
Run Code Online (Sandbox Code Playgroud)

它只会在表单提交时设置会话值(从Form1提交),所以当你点击后退按钮时,它不会设置空白值并保持最后一个会话值)

问题2解决方案:

<?php 
       session_start(); 

       if(isset($_POST['carmake']))
           $_SESSION['carmake']=$_POST['carmake'];

       if(isset($_POST['carmodel']))
           $_SESSION['carmodel']=$_POST['carmodel'];

       if(isset($_POST['carmake']) || isset($_POST['carmodel'])){
            # Redirect on same page when submitting the form
            # will not ask for form submission when click back on browser page
            header("Location: page2.php")
            exit;
        }
Run Code Online (Sandbox Code Playgroud)