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

返回上一页时PHP丢失会话变量,php,session-variables,Php,Session Variables,我的网站主页上有一个表单,有两个字段:汽车品牌(carmake)和汽车模型(carmodel)。提交后,它会将用户带到第二页,该页显示用户在主页上输入的有关特定品牌和型号的信息 我正在使用post方法将变量传递到第2页,在那里我使用两个变量启动一个新会话: <?php session_start(); $_SESSION['carmake']=$_POST['carmake']; $_SESSION['carmodel']=$_POST

我的网站主页上有一个表单,有两个字段:汽车品牌(carmake)和汽车模型(carmodel)。提交后,它会将用户带到第二页,该页显示用户在主页上输入的有关特定品牌和型号的信息

我正在使用post方法将变量传递到第2页,在那里我使用两个变量启动一个新会话:

    <?php 
       session_start(); 
       $_SESSION['carmake']=$_POST['carmake'];
       $_SESSION['carmodel']=$_POST['carmodel'];
    ?>

这个很好用。在第二页上,我有一个第三页的链接,它使用了相同的两个会话变量。所以在第3页,我用session函数开始页面,session变量可以使用。到目前为止没有问题

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

问题1:我在第三页上有一个按钮,可以链接回第二页。当我使用此按钮返回第二个页面时,第二个页面不会回显会话变量。但是,如果我使用浏览器的“返回”按钮返回第二页,系统会要求我“确认重新提交”,然后第二页会正确地回显会话变量

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

问题2:是否有办法避免在以前访问过的使用会话变量的页面上“确认重新提交”(使用浏览器后退按钮时)


(我是这里的新手,提前为这篇很长的帖子道歉,因为这可能是一个非常简单的问题。)

问题1:除非您在分配之前检查$\u post是否有值,否则会话将得到空值。打开更高的错误日志级别并显示错误,您应该会看到关于未定义变量的通知。此外,当您确认提交时,它也会起作用,因为您正在将数据重新发布到第二页

问题1:在分配POST变量之前,请检查它们是否为空()

问题2:据我所知,您正在返回您的浏览器以前发布到的页面,它想知道您是否想再次返回(以获得与以前相同的结果)

更新:另外,您应该发布更多代码。

问题1解决方案: 更改代码

<?php 
       session_start(); 
       $_SESSION['carmake']=$_POST['carmake'];
       $_SESSION['carmodel']=$_POST['carmodel'];

我知道我来晚了,但我只是想分享一下我的解决方案。我希望这对某人有帮助

问题1:解决办法 仅当表单已提交时才在会话中存储该值

<?php 
    session_start();

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

    /* Rest of the code goes here */

提供问题所在第2页的代码。第一个问题的解决方案非常有效。它解决了两个问题:从第3页开始,我可以使用网页上的后退按钮(链接)或浏览器上的后退按钮返回第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;
        }
<?php 
    session_start();

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

    /* Rest of the code goes here */
<?php 
    session_start(); 

    header("Cache-Control: no cache");
    session_cache_limiter("private_no_expire");

    /* Rest of the code goes here */
<?php 
    session_start();

    header("Cache-Control: no cache");
    session_cache_limiter("private_no_expire");

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

    /* Rest of the code goes here */