3

PHPページでMVCパターンに従いました。すべてのビュー ページにコントローラー ページを作成し、モデル ページとやり取りします。すべてのビュー ページの上部にあるユーザーのログインを確認しました。しかし、コントローラーページでチェックしたことはありません。誰でもコントローラーページに直接入ることができ、データベースの内容を変更することができます。

誰でも教えてください、コントローラーページからデータベースに入ることができますか。そして、コントローラーページでユーザーのログインを確認する必要があるかどうか。

4

1 に答える 1

4

私の理解が正しければ、コントローラーページからリンクされたすべてのページの上部に LOGIN チェックを入れています (index.php を想定)。

もしそうなら、あなたのリンクされた各ページの上部でログインチェックを行う必要はありません。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 クラスを定義していないため、他のファイルはエラーを返します。

つまり、 $db = new Database(); を定義した場合、index.php では $db がまだ定義されていないため、他のファイルに直接アクセスしようとするとエラーが発生します。

于 2013-01-25T06:08:32.150 に答える