我正在开发一个用户必须登录的网站,之后他们可以访问他们的个人资料。但我不知道如何通过在地址栏中键入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。我做错了什么?
答案 0 :(得分:0)
在Apache配置中尝试这个,考虑到你正在使用它。我用过“localhost”。替换为您的域名。
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]
希望这有帮助。
答案 1 :(得分:0)
您需要一个层次结构,然后需要确定允许查看页面的权限级别。以下是权限的示例列表...
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()
有用,它可能只适用于某些类型的数据,而是我会测试if {$something=='')
。