タイトルが示すように、訪問者が特定の URL から来ていない場合、ページのコンテンツを表示できないようにしたいと考えています。どうすればこれを達成できますか?私はNginxの上にPHPを持っています。PHP と Nginx のどちらを使用した方が良いでしょうか?
HTTP_REFERER
ブラウザには必須ではないため、使用は最良のアイデアではないことを読みました...どうしますか(コード例)?
タイトルが示すように、訪問者が特定の URL から来ていない場合、ページのコンテンツを表示できないようにしたいと考えています。どうすればこれを達成できますか?私はNginxの上にPHPを持っています。PHP と Nginx のどちらを使用した方が良いでしょうか?
HTTP_REFERER
ブラウザには必須ではないため、使用は最良のアイデアではないことを読みました...どうしますか(コード例)?
おそらく完璧ではありませんが、最初のページに $_SESSION を設定し、リンクされたページでそれを確認して削除します。
$_SESSION['allow'] = 'yes';
それでは次のページへ
if(isset($_SESSION['allow']) && $_SESSION['allow'] == 'yes') {
$_SESSION['allow'] = 'now viewing';
}
とか、そういうことか……。
最も確実な解決策は、あるページから次のページへと推測するのが簡単ではない _GET パラメーターを、a-la の一意のトークンとして渡すことです。
ただし、これは最も単純なソリューションではなく、実装するのもはるかに簡単ではないため、正しく実装するには非常に多くの労力が必要です。
複雑さの順に、最も単純なものを上にして、代替案は次のとおりです。
最後の解決策の詳細
最初のページで 1 回限りの文字列が生成され、すべてのリンクに追加されます。次に、この文字列がデータベース/フラット ファイルのエントリと一致するかどうかを確認し、一致する場合はアクセスを許可します。そうでない場合は、アクセスを拒否します。次に、ユーザーがページを再度通過する必要があるように、トークンを無効にします。
ページへのアクセスを制限する唯一の方法は、誰かの資格情報を使用することです。なりすましの可能性があるため、ユーザーがどこから来たかを検出する信頼できる方法はありません。
したがって、ユーザーがページ A から来たばかりの場合にのみページ B へのアクセスを許可する方法はありません (信頼できない方法で許可しない限り)。HTTP_REFERER
ページ A に Cookie (またはセッション変数) を設定し、ユーザーが Cookie (セッション変数) を設定していない限りページ B を表示しないこともできますが、ユーザーがページ A からページ B に直接移動する必要はありません。
簡単な方法は、最初のページで 1 回限りのセッション変数を設定し、2 番目のページでその変数を読み取ることです。
たとえば、ページ 1:
$_SESSION['viewed_page1'] = true;
ページ2:
if(!$_SESSION['viewed_page1']){
echo 'You need to visit page 1 first!';
}
.
セッション変数を使用して、あるページから特定の「キー」を渡し、それを表示するために次のページでそれを要求することができます。
ここでセッションに関する情報を見つけることができます