无法将用户(管理员)正确分配给 visit/acces 和 adminpage.php
Can't correctly assign a user (Admin) to visit/acces an adminpage.php
当我使用 admin.php 中的代码时,它并没有给我预期的回显,而我的数据库中有正确的值
我已经尝试在 google / Whosebug 上搜索它,但找不到任何解决方案,只是连接不正确。试图把 ISSET 代码放在前面但也没有成功。
数据库:
用户名/密码/电子邮件/角色
admin/test123/@html.com/admin
登录后(会话)基本上什么也没有。
<?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
session_start();
if ($stmt = $mysqli->prepare("SELECT id, username, password, salt, role
FROM members
WHERE username = ? LIMIT 1")) {
$stmt->bind_param('s', $username); // Bind "$email" to parameter.
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
// get variables from result.
$stmt->bind_result($user_id, $username, $db_password, $salt, $role);
$stmt->fetch();
$role = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $role);
$_SESSION['role'] = $role;
}
$role = "admin";
if(isset($_SESSION['role'])) {
if($_SESSION['role'] == $role) {
echo "welcome adminisn";
} else {
echo ("Acces Denied");
exit();
}
} else {
echo "Session not set";
}
它让我访问被拒绝
虽然我的角色列中有管理员
使用大写 _SESSION
!?
if(isset($_session['role'])) {
这个分配是否正确?
什么是 $role
?
如果 $role
设置为 "admin"
,则对所有人启用管理 mod。对于所有其他值,全部禁用。
$_SESSION['role'] = $role;
我假设它不起作用的原因是您没有在用户登录时为 $_SESSION['role'] 分配一个值,并且您没有语句来检查它是否未分配.
此代码将起作用的任何一种方式:
<?php
session_start(); // If we remove this then we get error Session not set
$role = "admin"; // If we change the role to something else we get access not granted
if(isset($_SESSION['role'])) {
if($_SESSION['role'] == $role) {
echo "Welcome admin";
} else {
echo("Access not granted");
exit();
}
} else {
echo "Session not set!";
}
我们需要先初始化session_start()。
我正在手动分配角色,但您应该从数据库查询中获取它以检查用户是否具有管理员权限。然后我们将检查会话是否已设置。如果不是,那么我们将显示消息会话未设置。
如果设置了会话,我们需要将角色与用户角色进行比较。如果匹配,我们会收到欢迎管理员的问候语,如果角色是其他角色,我们会收到未授予的消息访问权限。
我建议查看 php 手册以更多地了解会话。忘记一些东西真的很容易,然后整个事情就不起作用了。至少这是我以前的经验。
当我使用 admin.php 中的代码时,它并没有给我预期的回显,而我的数据库中有正确的值
我已经尝试在 google / Whosebug 上搜索它,但找不到任何解决方案,只是连接不正确。试图把 ISSET 代码放在前面但也没有成功。
数据库:
用户名/密码/电子邮件/角色 admin/test123/@html.com/admin
登录后(会话)基本上什么也没有。
<?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
session_start();
if ($stmt = $mysqli->prepare("SELECT id, username, password, salt, role
FROM members
WHERE username = ? LIMIT 1")) {
$stmt->bind_param('s', $username); // Bind "$email" to parameter.
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
// get variables from result.
$stmt->bind_result($user_id, $username, $db_password, $salt, $role);
$stmt->fetch();
$role = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $role);
$_SESSION['role'] = $role;
}
$role = "admin";
if(isset($_SESSION['role'])) {
if($_SESSION['role'] == $role) {
echo "welcome adminisn";
} else {
echo ("Acces Denied");
exit();
}
} else {
echo "Session not set";
}
它让我访问被拒绝 虽然我的角色列中有管理员
使用大写 _SESSION
!?
if(isset($_session['role'])) {
这个分配是否正确?
什么是 $role
?
如果 $role
设置为 "admin"
,则对所有人启用管理 mod。对于所有其他值,全部禁用。
$_SESSION['role'] = $role;
我假设它不起作用的原因是您没有在用户登录时为 $_SESSION['role'] 分配一个值,并且您没有语句来检查它是否未分配.
此代码将起作用的任何一种方式:
<?php
session_start(); // If we remove this then we get error Session not set
$role = "admin"; // If we change the role to something else we get access not granted
if(isset($_SESSION['role'])) {
if($_SESSION['role'] == $role) {
echo "Welcome admin";
} else {
echo("Access not granted");
exit();
}
} else {
echo "Session not set!";
}
我们需要先初始化session_start()。 我正在手动分配角色,但您应该从数据库查询中获取它以检查用户是否具有管理员权限。然后我们将检查会话是否已设置。如果不是,那么我们将显示消息会话未设置。
如果设置了会话,我们需要将角色与用户角色进行比较。如果匹配,我们会收到欢迎管理员的问候语,如果角色是其他角色,我们会收到未授予的消息访问权限。
我建议查看 php 手册以更多地了解会话。忘记一些东西真的很容易,然后整个事情就不起作用了。至少这是我以前的经验。