您好我正在使用php开发一个多步骤表单,并且我一直想知道用户是否有办法改变会话变量,例如在第一页上我有这样的事情:
<?php
session_start();
if(isset($_POST['submit'])){
$_SESSION['name'] = $_POST['name'];//and so on
}
?>
,另一页有类似的内容:
<?php
session_start();
$name = $_SESSION['name'];
?>
我的问题是用户是否可以在第二页上修改会话变量的值
答案 0 :(得分:2)
由于您使用POST变量的值填充会话变量,因此他们可以继续使用任意值重新提交第一个表单。
您可以使用应用程序逻辑来解决这个问题:
<?php // form1
session_start();
if (empty($_SESSION['step'])) {
$_SESSION['step'] = 1;
}
if ($_SESSION['step'] > 1) {
header("Location: form2.php");
exit; // This exit is very important, don't neglect it
}
if (isset($_POST['submit'])){
$_SESSION['name'] = $_POST['name'];//and so on
$_SESSION['step'] = 2;
}
然后
<?php // form2
session_start();
if (empty($_SESSION['step'])) {
header("Location: form1.php");
exit;
}
if ($_SESSION['step'] > 2) {
header("Location: form3.php");
exit;
}
if ($_SESSION['step'] < 2) {
header("Location: form1.php");
exit;
}
$name = $_POST['name'];
通过使用应用程序逻辑,您可以控制应用程序中访问者的流量。
如果您询问用户是否可以在您编写的任何代码之外更改$_SESSION
个变量,答案通常是否定的。另见:this answer。