会话变量未传递给下一个文件

时间:2014-02-18 15:02:19

标签: php session-variables

所以我在这个网站上搜索了这个问题并尝试了所建议但仍然没有运气。我想也许这是我的'服务器'(在我的平板电脑上使用KSWEB,现在没有电脑)所以我创建了两个简单的文件来共享两者之间的会话变量,它工作正常。我不知道为什么这不适用于这两个。我正在尝试创建一个登录页面(我知道这是一个不安全的页面)。错误功能USED工作(这是什么让我),现在它没有。文件如下。我只包括了admin.php的顶部部分,因为我已经注释掉了其余部分。这真的不应该。现在,如果您提交表单而未在管理员提示中输入任何内容,则星号旁边会显示错误,上面写着“管理员需要填写”。尽管我付出了最大努力,但这已不再适用了,我完全不知道为什么会这样做。

的login.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();
?>

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
    }
}
?>

2 个答案:

答案 0 :(得分:1)

不要破坏文件末尾的会话..

</html>

<?php
session_destroy();
?>

另外,您应该在每个exit;之后添加header('Location: ...');

发送标题时,浏览器会识别出更改位置但脚本不会结束。事实上,浏览器甚至不必遵循标题,它也可以继续使用脚本。您必须停止脚本,因为标题不会退出脚本。

答案 1 :(得分:0)

而不是

<button onclick="submitForm()">Submit</button>

使用

<input type="submit" value="Submit">

然后在回音之前进行检查

<?php echo isset($_SESSION["adminErr"])? $_SESSION["adminErr"]: "not set" ;?>

进一步调试:

var_dump($_POST);
var_dump($_POST["admin"]);
var_dump($_SESSION);
var_dump($_SESSION["adminErr"]);