2013-01-25 39 views
3

我遵循MVC模式在我的PHP页面中。我为每个视图页面创建了一个控制器页面,并且它将与模型页面交互。我已在每个查看页面的顶部检查了用户的登录名。但我从来没有检查控制器页面。由于任何人都可以直接进入控制器页面并可能更改数据库内容。是否需要检查每个控制器页面的登录功能

所以任何人都请告诉我,是否可以通过控制器页面进入数据库。是否需要检查控制器页面中的用户登录。

+2

什么框架? – sdjuan

+0

没有使用的框架 –

+0

后面的MVC模式 –

回答

4

如果我理解正确,您将在控制器页面的每个链接页面的顶部(假设您的index.php)进行LOGIN检查。

如果是这样,那么您不需要在每个链接页面的顶部进行登录检查,只能从index.php中进行检查。如果您的登录成功位于index.php的顶部,那么您将继续包含您的目标视图页面。

例如(在你的index.php)

<?php 

if (!$user->checkSession()) 
    header('Location: login.php'); 

if ($_GET['p'] == 'viewPageName') 
    include('modules/viewPageName.php') 
elseif and so on 

?> 

编辑

现在我有一个更好的了解你的问题。

解决方案1 ​​
在你的index.php(顶部位置)

<?php 
define('DIRECT', true); 

your login check, etc... 
?> 

在你其他文件,在顶部

<?php 
if (!defined('DIRECT')) die('No direct access is allowed'); 

other code, etc... 
?> 

放解决方案2:
将.htaccess文件放入所有其他文件所在的文件夹中,并拒绝直接访问这些文件。

放入.htaccess中的以下内容:

deny from all 

解决方案3:
好吧,假设你已经在index.php文件中定义的$ DB文件,并在设置类你index.php,您的其他文件将返回错误,因为您没有在其中定义您的数据库类。

换句话说,如果你定义了$ db = new Database();在您的index.php中,如果您尝试直接访问,您的其他文件将会出错,因为$ db尚未在其中定义。

+0

@克里斯,是的,你的假设是正确的,但我有控制器页面中的数据库intract所以如果我直接进入控制器不是从查看页面,那么它可能会破坏数据库中的内容.. –

+0

如果我指出一个URL绕过index.php? – tomexsans

+0

@tomexsans,是的,绕过index.php, –

相关问题