我如何在PHP中创建一个非常基本的登录脚本


How do I create a very basic login script in PHP?

我在admin.php中使用$_SESSION["user'],然后在login.php中调用session_register("user")session_register("user")没有返回我的用户值

目前,当我想使用header("location:admin.php")转发到管理页面时,会导致循环,从而返回登录页面。

这是我的表单html form.php:
<form action='login.php' method='post'>
    Password:
    <input type='password' name='password'>
    <input type='submit' value='Login'>
</form>

这个页面显示了我的管理区域admin.php:

<?php
session_start();
if (!isset($_SESSION["user"])) {
    include('form.php');
    }
else    {
    echo "admin stuff";
    }
?>

这是你的login.php:

<?php
session_start();
include('functions.php');
connect();
$pass = $_POST['password'];
$text = file_get_contents('pw.txt');
if ($pass == $text) {
    session_register("user");
    header("location:admin.php");
}
else {
    include('form.php');
    echo "Invalid password: '$pass'";
}
?>

如何使上述代码按预期工作?

session_register自5.3起已弃用。问题是你用错了。在调用session_register之后,您仍然应该设置变量。看来你想为这个脚本做的是在login.php中将会话中的用户密钥设置为true(尽管将其称为'loggedin'或其他东西更有意义);

$_SESSION['user'] = true;

但是稍微仔细看一下你的代码,我发现它有很多错误。首先,您只使用单个密码进行保护,并且将其未加密地存储在文本文件中(看在上帝的份上,不要这样做)。用户名/密码组合是一种更常见的保护形式。而且,您使用的是POST数据,没有任何形式的验证/卫生。

首先,你不应该使用这样的东西:

$pass = $_POST['password'];

永远不要相信来自用户的数据,并且总是转义它们

$pass = mysqli_real_escape_string($db_connection, $_POST['password']);

关于会话,你应该使用

$_SESSION['user'] = some_user_identification_info;

register是一种非常古老的注册会话变量的方法。