Php 会话变量未传递到下一个文件
所以我在这个网站上搜索了这个问题,并尝试了一些建议,但仍然没有成功。我想这可能是我的“服务器”(在我的平板电脑上使用KSWEB,现在没有电脑),所以我创建了两个简单的文件,在两者之间共享一个会话变量,效果很好。我不知道为什么这对这两个人不起作用。我正在尝试创建一个登录页面(我知道这是一个不安全的页面)。error函数过去是有效的(这就是我的原因),但现在不行了。文件如下。我只包括admin.php的顶部部分,因为我已经注释掉了其余部分。这真的不要紧。现在,如果您提交表单时没有在管理员提示符中输入任何内容,则会在星号旁边显示一个错误,表示“需要填写管理员”。尽管我尽了最大的努力,但这已经不起作用了,我完全不明白为什么 Login.phpPhp 会话变量未传递到下一个文件,php,session-variables,Php,Session Variables,所以我在这个网站上搜索了这个问题,并尝试了一些建议,但仍然没有成功。我想这可能是我的“服务器”(在我的平板电脑上使用KSWEB,现在没有电脑),所以我创建了两个简单的文件,在两者之间共享一个会话变量,效果很好。我不知道为什么这对这两个人不起作用。我正在尝试创建一个登录页面(我知道这是一个不安全的页面)。error函数过去是有效的(这就是我的原因),但现在不行了。文件如下。我只包括admin.php的顶部部分,因为我已经注释掉了其余部分。这真的不要紧。现在,如果您提交表单时没有在管理员提示符中输入
<?php
session_start();
?>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
<script>
function submitForm()
{
document.adminform.submit();
}
</script>
</head>
<?php echo $_SESSION["adminErr"];?>
<h2>Administrator login page</h2>
<form method="post" action="admin.php" name="adminform">
Admin: <input type="text" name="admin" style="position:absolute; left:100px">
<span class="error" style="position:absolute; left:285px">*<?php echo $_SESSION["adminErr"];?></span>
<br><br>
Password: <input type="password" name="password" style="position:absolute; left:100px">
<span class="error" style="position:absolute; left:285px">*<?php echo $_SESSION["passwordErr"];?></span>
<br><br>
<button onclick="submitForm()">Submit</button>
</form>
<br><br><br>
<p><?php echo $_SESSION["flogin"];?></p>
</html>
<?php
session_destroy();
?>
.错误{color:#FF0000;}
函数submitForm()
{
document.adminform.submit();
}
管理员登录页
管理员:
*
密码:
*
提交
Admin.php
<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] == POST)
{
if (empty($_POST["admin"])) // Check to make sure Admin field is filled out
{
$_SESSION["adminErr"] = "Admin field must filled"; // Set error if not filled
header("location:login.php"); // Return to login page
}
}
?>
而不是
<button onclick="submitForm()">Submit</button>
不要在文件末尾销毁会话
</html>
<?php
session_destroy();
?>
你也应该把退出每个标题('Location:…')后的code>代码>
发送标头时,浏览器会识别更改位置,但脚本不会结束。事实上,浏览器甚至不必遵循标题,它也可以继续使用脚本。您必须停止脚本,因为标题不会退出脚本。一个安全方面是始终(只是习惯于始终这样做)使用exit
afterheader('Location:login.php')这实际上解决了我的问题。一切都恢复正常了。介意解释一下为什么会这样吗?试了很多次,实际上还是不起作用。
<?php echo isset($_SESSION["adminErr"])? $_SESSION["adminErr"]: "not set" ;?>
var_dump($_POST);
var_dump($_POST["admin"]);
var_dump($_SESSION);
var_dump($_SESSION["adminErr"]);
</html>
<?php
session_destroy();
?>