0

私はパスワードで保護された Web サイトを持っています。LinkedIn のようなものを想像してみてください。セッションが期限切れになると、再度ログインするように求められます。

ただし、一部のページには ajax 呼び出しがあり、コンテンツをサーバーから div にロードします。

セッションの有効期限が切れた後に開いている div に戻って何かを入力しようとすると、反対側の php が div 内でリダイレクトを行い、基本的にログイン ページ全体を div 内にロードします。これにより、ページ内にページが作成されます。これは、サイトが適切に機能していないことをユーザーに知らせる明らかなエラーです。

開いている div 内に表示されるログイン ページの代わりに、div を閉じて、ページ全体をログインにリダイレクトしたいと思います。しかし、私はこれを達成するのに苦労しています。

現在、セッションをチェックして続行できるようにするか、ログインページに移動できるようにするインクルードを使用してパスワード保護を行っています。

If ($_SESSION['login'] != '1') {
header("Location: relogin.php"); }

ユーザーがセキュリティをバイパスできないように、div を埋めるための ajax 呼び出しによってトリガーされるスクリプトにこれを含めます。これは、いくつかのグローバル変数、関数なども保持する包括的なインクルードです。

呼び出しが ajax などから来ているかどうかを検出するコードを追加して、リダイレクトを行わず、代わりにログインにメッセージを表示できますか? または理想的には、div を閉じてページ全体をリダイレクトしますか?

これは大規模なサイトであるため、グローバル インクルードに入る可能性のあるコード ブロックを 1 つ見つけたいと考えています。

提案をいただければ幸いです。

4

4 に答える 4

0

JS 側でリダイレクトを行う必要があります。

まず、PHP 側について説明します。AJAX ハンドラーに、明確で明確なステートフルな応答を提供する必要があります: 「申し訳ありませんが、承認されていません」。REST から少し借りましょう。

各 AJAX 呼び出しの上部:

<?php if (!YouAreLoggedIn()) {
header($_SERVER['SERVER_PROTOCOL']." 403 Forbidden");
exit(); ?>

これにより、訪問者に 403 エラーがスローされ、スクリプトが強制終了されます。jQuery の 403 エラーは XHR エラーとしてカウントされるため、他のすべてのものとは無関係にマップできます。

典型的な AJAX 呼び出しは次のようになります。

$.ajax({
  url: "your.url.here.php",
  type: "POST",
  success: function(d) { YourSuccessCallHere(); },
  error: function() { window.location.href='your.redirect.here.php'; }
});

これが最もクリーンな方法です。

于 2012-11-18T12:28:15.053 に答える