限制对特定页面的访问

时间:2014-09-30 03:01:55

标签: javascript php mysql session

我正在开发一个用户必须登录的网站,之后他们可以访问他们的个人资料。但我不知道如何通过在地址栏中键入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。我做错了什么?

2 个答案:

答案 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=='')