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

时间:2011-08-22 14:42:45

标签: php login

我在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'";
}

?>

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

2 个答案:

答案 0 :(得分:1)

自5.3以来,

session_registerdeprecated。而问题是你错了。调用session_register后,您仍应设置变量。您希望为此脚本执行的操作是将会话中的用户密钥设置为login.php中的true(尽管如此,调用此'loggedin'或其他内容会更有意义;

$_SESSION['user'] = true;

但是对你的代码稍微仔细一点,我发现它有很多错误..对于一个,你只使用一个密码进行保护,你可以将未加密的密码存储在文本文件中(为了上帝的爱) ,不要那样做)。用户名/密码组合是一种更常见的保护形式。此外,您使用的是POST数据,没有任何形式的验证/卫生。

答案 1 :(得分:1)

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

  

$ pass = $ _POST ['password'];

永远不要信任来自用户的数据并始终逃避它们

  

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

现在关于会话,你应该使用

  

$ _ SESSION ['user'] = some_user_identification_info;

寄存器是一种非常古老的方式来注册会话变量。