1

ユーザーが profile.php にアクセスした回数をカウントするために、ページ数を使用しています。ログインしていない場合、5 人のユーザー プロファイルしか表示できません。

各プロファイルには、profile.php の拡​​張子があります (例: profile.php?id=1 または id=2 など)。

ページ数は正常に機能します。基本的に、ユーザーが 5 つ以上のプロファイルをクリックしようとすると、limit.php ページにリダイレクトされ、制限に達したことをユーザーに通知し、さらに表示するにはログインする必要があります。

以下にリストされているいくつかのプロファイルを除外するように設定しました。

ユーザーが 99999 や 99998 などの除外されたプロファイルをクリックしても、ユーザーを limit.php ページにリダイレクトしません。これらのプロファイルを除外したいのでこれで問題ありませんが、ユーザーが間に 1 や 8 などの別のプロファイルをクリックし、ユーザーが 99999 または 99998 に再アクセスしようとすると、許可されずにリダイレクトされますか?

スクリプトを編集して、ユーザーが他のプロファイルにアクセスした後またはアクセスしている間でも、リダイレクトせずにプロファイル 99999 または 99998 にアクセスできるようにする方法を教えてもらえますか?

これが明確であることを願っています。ありがとう

 <?php 

    !session_id() ? session_start() : null;
    if(!isset($_SESSION['page_access_count'])){
        $_SESSION['page_access_count'] = 1;
    }elseif($_SESSION['page_access_count'] >= 6){
        // redirect to signup page
        header('Location: limit.php');
        exit;
    }

      $free_profiles = array(99999,99998,99997,99996,99995,99994,99993); // array of profile IDs to exclude

    if (! in_array($_GET['id'], $free_profiles)) {
      $_SESSION['page_access_count']++;
    }


        ?>
4

1 に答える 1

1

制限検証ロジックを という関数にラップしましたverify_profile_visit_limit。これで、(クエリ文字列であるため)を使用してページの「id」を取得し、関数を使用して関数を終了することにより、配列$_GET内にあるかどうかの制限チェックをスキップでき ます。$free_profileverify_profile_visit_limitreturn

!session_id() ? session_start() : null;

verify_profile_visit_limit();

function verify_profile_visit_limit(){
    $free_profiles = array(99999,99998,99997,99996,99995,99994,99993);

    if(in_array($_GET["id"], $free_profiles)) return;

    if(! isset($_SESSION["page_access_count"])){
        $_SESSION["page_access_count"] = 0;
    }

    $_SESSION["page_access_count"]++;

    if($_SESSION["page_access_count"] > 5){
        header("Location: limit.php");
        exit();
    }
}
于 2012-12-24T19:42:47.037 に答える