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