我在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'";
}
?>
如何使上述代码按预期工作?
答案 0 :(得分:1)
session_register
为deprecated。而问题是你错了。调用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;
寄存器是一种非常古老的方式来注册会话变量。