あなたが抱えている問題は、デフォルトのハンドラー スクリプトの周りにコードを配置することで、ほとんど解決できます。(以下の私のガイドラインを参照してください。)
このようなスクリプトに情報を渡す基本的な方法は 2 つあります (上のコメントで述べたように)。基本的な方法は、 のような GET 変数を使用することですhttp://www.example.com/main.php?p=1
。
より訪問者にとって使いやすい URL が必要な場合はRewriteRule
、.htaccess
ファイル内で a を使用して、ナイス URL をハンドラーが理解できる URL に変換できます。( mod_rewriteを有効にする必要があります。)
これは、この特定の質問にはやり過ぎかもしれませんが、安全な Web アプリに関するいくつかのガイドラインを次に示します。それらはすべて関連していると思います:
- 機密情報をパブリック Web ルートの外に置きます。
- デフォルトでは、情報を表示しません。ユーザーが明確に承認されている場合にのみ、情報の表示を有効にします。
- 理想的には、これには URL が含まれます (有効な URL を入力しても承認されていない場合は、有効な URL に到達したことを知らせないでください)。1 つの方法は、認証されていない場合にログイン ページにリダイレクト (以前のようにロケーション ヘッダーを設定) することです。
- デフォルトのハンドラ スクリプトを作成します。この中央スクリプトには、必要なすべてのファイルが含まれ、必要なすべての関数が呼び出されます。すべてのリクエスト情報をこのハンドラに渡し、すべての HTML を出力させます。
- #3 の要件:コードを関数とクラスにカプセル化します。そうすれば、デフォルト ハンドラーは、必要な場合にのみ、準備ができたときにそれらを呼び出すことができます。単にそれらが含まれていたからではありません。これにより、アプリのフローをより詳細に制御できます。
echo
コード全体のランダムな場所で HTML を ing する代わりに、すべての HTML 出力をメインの handlerに返します。乱数echo
が散在していると、セキュリティ ホールが発生しやすくなります。
- ユーザー入力を信用しないでください。
$_GET
またはから取得した値を使用する場合は、$_POST
使用する前に有効な値であることを確認してください。
編集:
(これはより具体的で、現在のコードに向けられています)
コードが期待どおりに実行されない理由は 3 つあります。
最初の行で閉じ括弧を省略しましたif(!isset($_SESSION['page'])
。
コードの記述方法は$_SESSION['page']
、ユーザーがページにアクセスしたときに既に設定されている場合、ログイン ページにリダイレクトされます。これを修正するには、節に the を入れ、header('Location:login.php');
exit;
節を完全if
に削除します。else
if(!isset($_SESSION['page'])) {
header('Location:login.php');
exit;
}
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];
$_SESSION['page']
最初のページを表示できるように、最初にログインする時間を設定する必要があります。
$_SESSION['page']
スクリプト名の代わりに整数を使用することをお勧めします。そうすれば、ユーザーが$_SESSION['page']
ログインしたときに 1 に設定でき、ユーザーがページを正常に表示するたびに 1 ずつ増加$_SESSION['page']
します。このユーザーが閲覧できる次の論文$_SESSION['page']
を意味すると考えてください。
$pageid
用紙ごとに設定できます。ページを表示しようとするたびに、$_SESSION['page']
が 未満の場合は、ページを$pageid
表示させません。