我在admin.php中使用$_SESSION["user']
,然后在login.php中调用session_register("user")
。session_register("user")
没有返回我的用户值
目前,当我想使用header("location:admin.php")
转发到管理页面时,会导致循环,从而返回登录页面。
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是一种非常古老的注册会话变量的方法。