2014-09-30 134 views
0

我正在开发一个用户必须先登录的网站,然后他们才能访问他们的个人资料。但我不知道如何限制用户通过在地址栏中键入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

不要使用'回声'';'它会导致包含整个网页的浏览器往返,只是为了让浏览器从服务器请求另一个页面而忽略它,使用'header('Location: profile.php在'login.php'形式顶部的‘命令为好;');退出;' – RiggsFolly 2014-09-30 03:19:21

+0

由于它的工作,如果我不键入时退出;到底 – 2014-09-30 03:27:01

+0

添加了’在session_start()。一旦你开始使用会话,你必须在应用程序的EVERY页面顶部添加'session_start();'来维护会话。 – RiggsFolly 2014-09-30 03:31:29

回答

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()是有用的,它可能只与某些类型的数据的工作,而不是我将测试如果($something=='')例如,

+0

非常优雅,但**主要是杀死**实际上被问到的问题! – RiggsFolly 2014-09-30 03:40:39

+0

@RiggsFolly如果它可以帮助他们获得更好的洞察力,写出更好的代码,迟早它会意味着更少的麻烦试图找出这一切......然后还有所有其他人谁问同样的问题,并最终阅读本。对某些人来说这看起来有些过火,最终可能为他人节省数百小时。 – John 2014-09-30 03:44:42

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] 

希望这会有所帮助。

+0

一个简单的解释这哪里是Apache的配置文件 – 2014-09-30 03:16:22

+0

这是如何相关的问题???? – RiggsFolly 2014-09-30 03:17:06

+0

真的是里格斯?正确阅读他的问题。这是“如何限制用户通过在地址栏中输入sitename.com/profile.php来直接访问个人资料页面?”。 – 2014-09-30 03:21:12