1

我有一个非常简单的登录脚本,它使用 PHP 的会话来限制访问,但我遇到了一个非常特殊的问题。即使使用正确的凭据,第一次尝试登录总是失败,但第二次和后续尝试都没有问题。我真的很困惑原因,所以任何帮助将不胜感激。

登录表单,删除了不相关的代码(是的,我知道将登录内容作为纯文本存储在 PHP 文件中通常是一个坏主意,但在这种情况下它不相关):

<?php

$username = $_POST['username'];
$password = $_POST['password'];

$valid_user = "user";
$valid_password = "password";


if (($_POST['op'] == "ds") && ($username == $valid_user) && ($password == $valid_password)) {
    session_start();
    session_register('valid');
    $_SESSION['valid'] = 'yes';
    header("Location: valid.php");
}

?>

<p>Username:<br>
<input type="text" name="username" size=15 maxlength=25></p>
<p>Password:</strong><br>
<input type="password" name="password" size=15 maxlength=25></p>
<input type="hidden" name="op" value="ds">
<p><input type="submit" name="submit" value="login"></p>

每个需要身份验证的页面都有

require "auth.php"

auth.php:

<?php

session_start();

if($_SESSION['valid'] != 'yes') {
    header("Location: login.php");
}

?>
4

1 回答 1

3

试一试die()_

header("Location: valid.php");

可能是因为您之后立即将登录表单输出到浏览器而被忽略了。

此外,adie()是强制性的

header("位置:login.php");

如果您的脚本在其后输出任何内容。否则,即使没有登录,请求客户端也可能收到敏感信息。

于 2010-09-19T19:05:11.780 回答