2009-12-28 88 views
2

这可能是一个愚蠢的问题,但我想我会问我之前,我做了一些愚蠢的事情: 我有一个自定义登录对话框的Web应用程序,它需要一个用户/传递发送到服务器。如果两者都与数据库中的条目相匹配,那么用户可能访问的页面大约有10个左右(取决于与该帐户相关的权限)......大多数情况下非常简单。PHP登录重定向

当然,如果用户尝试访问其中一个页面而没有真正登录,或者没有足够的权限,那么我需要将他退回到登录页面以输入用户名/密码这将使他们获得访问权限。

我的问题:似乎对我来说,我需要在每个受限PHP页面的顶部打一个电话,检查凭证并重定向,如果它们丢失或不足......这是一个健全的方法?或者PHP提供了一种更智能的方式,不需要在应用程序的几乎所有页面中复制呼叫?

BTW:这不是一个MVC应用程序 - 只是直PHP

谢谢!

+0

那么为什么不使用MVC应用程序?使用MVC框架,您只需要在控制器构造函数或控制器的init()函数中调用代码(就像在Zend框架中一样) – AntonioCS 2009-12-28 21:15:23

回答

6

是的;如果这是简单的PHP,你需要检查每个页面。这并不需要是困难的,但:

if (!hasAccess($user, $page)) 
{ 
    header("Location: signin.php?redirecturl={$page}"); 
    die(); 
} 

并在hasAccess()做你的逻辑。您甚至可以将此逻辑包含在单独的文件中,并将其包含在您的所有页面上,并将代码保存在一个地方,以备日后更新访问条件或其他任何内容。

+1

我也会'urlencode()''$ page',为了安全起见。 – mpen 2009-12-28 21:00:15

+0

'$ page'不一定是一条路径。可能是一个整数:) – Sampson 2009-12-28 21:03:45

+0

非常感谢 - 这回答了我的问题。很高兴知道我是理智的。 – Bob 2009-12-28 21:32:54

1

您可以使用一个包含了代码来检查,如果用户登录文件,然后包括这个在每个页面的顶部,您要验证登录。

0

此外,看看创建一个php头文件,为你做登录检查,然后你只需要在每个页面的顶部包含该头,你想保护。