我是PHP的新手。我创建了一个用户包括用户和管理员的系统。我以系统用户身份登录,网址为localhost/View/user.php
。
当我将网址从localhost/View/user.php
更改为localhost/Admin/admin.php
时,用户会自动拥有管理界面。
我的问题是 - 如何阻止用户将网址更改为/admin.php
并访问管理界面?
答案 0 :(得分:1)
以下是一些例子:
http://php.net/manual/en/features.http-auth.php
但要知道这不是你应该用于真实网站的东西,除非你知道所有安全问题以及如何解决它们。
但是为了学习关于PHP的东西并且玩这个可能是一个开始的地方:)
答案 1 :(得分:1)
嗯,您无法强迫用户修改浏览器中的网址。
我认为您正在寻找的是某种用户角色。 因此,当您已经拥有登录系统时,我假设您将用户名和密码存储在某处(主要是数据库)。 你现在可以做的是添加一个额外的字段"角色"并写入" user"," admin"或者用来区分用户的东西。 在您的管理员页面,您可以检查用户是否具有角色" admin",如果不是,您可以将用户重定向到其他某个页面(例如索引)或只是打印出来"访问被拒绝&# 34;
(还有很多关于php的登录系统和用户角色的教程。我建议你也看一下)
答案 2 :(得分:1)
一个简单的答案是,您应该存储用户已通过$_SESSION
登录的事实(例如$_SESSION['user_id'] = [something from the database]
)并且可以稍后进行测试(例如isset($_SESSION['user_id'])
跟进通过在数据库中再次查看该用户以确保他们确实拥有管理员权限。如果他们不这样做,您可以通过header('Location: http://whereever.com/login.php')
或者什么不将它们重定向回登录页面。这不是&# 39;万无一失的安全,但它是一个开始。
如果会话未自动初始化(不太可能,但可能取决于服务器配置),您可以使用session_start()
在每个脚本的开头启动它。
更具体一点。我们假设您有一个名为user.php
的脚本,它接收用户登录信息。你可能会有这样的东西......
<?php
session_start();
$login = (isset($_POST['login'])) ? trim($_POST['login']) : '';
$pass = (isset($_POST['pass'])) ? $_POST['pass'] : '';
if ($login !== '') {
$user = [db->lookup_somehow(where=>login is $login)]
if ([the hash of $pass is the same as the hash of the pass in $user]) {
$_SESSION['user_id'] = $user['user_id'];
header('Location: http://wherever.com/admin.php');
} else {
// say "invalid login"
}
} else {
// handle missing input
}
?>
admin.php
可能看起来像......
<?php
session_start();
$user_id = (isset($_SESSION['user_id'])) ? $_SESSION['user_id'] : null;
$user = null;
if ($user_id) {
$user = [look up user from database based on their id];
if (!$user[has credentials to be an admin])
$user = null;
}
if (!$user) {
header('Location: http://wherever.com/user.php');
}
// else do admin stuff
?>
答案 3 :(得分:1)
为用户简单添加标记并检查天气是否设置了标志,如果不是通过用户到错误页面。 例 for admin $ flag_admin = 1; 并将其存储在会话中并检查是否设置了标志而不是允许他访问管理屏幕,否则显示错误页面。
答案 4 :(得分:1)
该问题的一种可能解决方案是在用户导航到admin.php
时检查管理员权限。如果用户具有足够的权限,则可以看到管理界面。如果用户没有管理员权限,则应将其重定向回user.php
。
但是,更好的选择是拥有一个登录页面 - login.php
。登录后,将检查用户权限,并在适用的情况下使管理界面可见。
答案 5 :(得分:1)
我有适当的解决方案。 假设您的管理员用户ID为“admin”,而您的其他用户具有其他用户ID。 然后使用$ _SESSION('login_user')登录。 在您的amdin页面中,您希望保护用户免受骚扰,
$result = mysql_query("select username from adminlogin where username = '".$_SESSION['login_user']."'");
$result_value = mysql_fetch_array($result);
echo $result_value['username'];
if($result_value['username']!="admin")
{
header("Location: index.php");
}
现在它将检查用户id = admin然后它允许访问其他方面它将页面重定向到index.php这是我们的登录页面。如果您无法理解,那么您可以重播。 Thanku