[英]Restricting access to specific pages
我正在开发一个网站,用户必须登录后才能访问其个人资料。 但是我不知道如何通过在地址栏中键入sitename.com/profile.php来限制用户直接访问个人资料页面。 我在Stack Overflow上搜索时遇到了这段代码,这是我的login.php脚本
if(!empty($row['username']) AND !empty($row['password']))
{
$_SESSION['login'] = true;
$_SESSION['username'] = $row['username'];
echo '<script>window.location = "profile.php"</script>';
}
现在,在profile.php的顶部,我已输入以下代码
<?php
session_start();
if (!$_SESSION['login']){
echo '<script>window.location = "index.html"</script>';
}
?>
用户仍然可以通过直接输入URL来访问profile.php。 我究竟做错了什么?
考虑到您正在使用一个,请在Apache配置中尝试此操作。 我用过“本地主机”。 用您的域替换。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteRule \.(php)$ - [F]
您可以通过在RewriteRule中使用以下OR条件来扩展文件限制。 对于前。 限制JPG和PHP的访问。
RewriteRule \.(php|jpg)$ - [F]
希望这可以帮助。
您将需要一个层次结构,然后需要确定允许查看页面所需的权限级别。 这是权限的示例列表...
10-管理员
9-网站管理员
8-助理网站管理员
7-主持人
6-高级会员
5-会员
4-受罚成员
3-已注册但未通过电子邮件验证的成员
2-人类访客
1-搜索引擎
0-禁止帐户
因此,在某人进行注册的示例中,您将其帐户设置为3级,一旦他们验证了电子邮件地址,便会将其帐户(数据库和会话)级别提高到5级。如果您正在编写软件,则此级别为10级扩展权限。
您想为会话变量(例如$_SESSION['user_permission']
分配权限(并使用前缀user_来表示所需的其他变量)。 当您需要检查权限时, 必须使用isset()
,这是一个示例...
<?php
if (isset($_SESSION['user_permission']) && $_SESSION['user_permission']>=5)
{
echo '<p>Member-only content visible here.</p>';
}
else if (isset($_SESSION['user_permission']))
{
echo '<p>Stop causing trouble and you would be able to see this page.</p>';
}
else
{
echo '<p>Please register a new account.</p>';
}
?>
使用isset()
确保您具有正确的括号数,这是每个人都会犯的常见错误。 如果您不使用isset()
则黑客可以查看错误消息以发现代码中的弱点,因此请始终检查某些事物,而不是假定它们存在。
同样,您也不需要重定向人员,只需让PHP从客户端开始的页面上拉内容即可,这是我的新手,而且我的想法很不错,我们将经历所有这些概念当您意识到自己使事情变得过于复杂时。 例如在我的博客/编辑链接才会出现,如果我或其他管理员/网站管理员的登录,无需重新创建整个页面只是权限的时候,虽然也有一些情况是类似的控制面板非常明显在这种情况下,您想尽早检查权限并确保提供正确的HTTP错误代码。
最后,我从未发现PHP的empty()
有用,它可能仅适用于某些类型的数据,相反,我将测试例如( $something=='')
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.