0

次のようなページを含むindex.phpがあります

<?php

define('MyConst', TRUE);

include_once('template/header.php');

if (!empty($_GET['action'])) {  
    $action = $_GET['action'];   
    $action = basename($action);   
    include("template/$action.php");   
} else { 
    include("template/main.php"); 
} 

include_once('template/footer.php'); 

?>

テンプレートディレクトリには、page1.php、page2.php などの他のページへのリンクを持つ main.php があります。

<a href="?action=page1">Goto page 1</a>
<a href="?action=page2">Goto page 2</a>

ユーザーが URL に「 http://mydomain.com/?action=page1 」と直接入力してページにアクセスできないようにするにはどうすればよいですか? そして、それを行った場合、それらを main.php にリダイレクトしますか?

4

5 に答える 5

1

それはいけません。あなたが望むことは単に不可能です。

サーバー側では、URL が入力されたのかクリックされたのかを知る方法はありません。

于 2013-09-26T12:45:04.613 に答える
1

私の理解が正しければ、あなたが望むことは、ユーザーhttp://example.org/?action=page1がから来ない限り、ユーザーがアクセスできないようにすることhttp://example.org/?action=mainです。そのためには、それらがから来たかどうかを検出できなければなりませんhttp://example.org/?action=main。これを行う最も安全な方法は、ユーザーがアクセスするときにユーザーに関連付けるランダムな値を生成し、ユーザーがアクセスするときにhttp://example.org/?action=main適切な値がユーザーに関連付けられているかどうかを確認することですhttp://example.org/?action=page1。そうでない場合は、そのページに直接アクセスしようとしました。

于 2013-09-26T12:52:01.883 に答える
0

たぶん、あなたの index.php でこれを試すことができます:

session_start();
if(! isset($_GET['action']))
{
   $_SESSION['pageAccess'] = true; # Set the key whatever you want
}

次に、そのスクリプトの下で (session_start() を 2 回使用する必要があります):

if(isset($_GET['action']))
{
  if(! isset($_SESSION['pageAccess']) || ! $_SESSION['pageAccess'])
     exit('There is no direct access allowed.');
}

この助けを願って、良い一日を。

于 2013-12-17T03:48:21.193 に答える
0

HTTP_REFERER を確認し、正しい値 (多くのページなど) を指していない場合は、ユーザーをリダイレクトします。

于 2013-09-26T12:45:03.157 に答える