0

これに似た問題がありますが、少し異なります。

私はそれを次のように構成しました: ユーザーが行きたいページは、displayData.php のようなものです。これは、最終的に戻るべきページです。このページは、ログインしているかどうか、およびセッションが次のように期限切れになっていないかどうかを確認します。

if ($_SESSION["loggedIn"] != "YES")
{
  header ("Location: ".$baseURL."timeout.php");
  exit();
}

timeout.php で、リファラーを確認します。

<?php
session_start();
$_SESSION['redirect'] = $_SERVER['HTTP_REFERER'];
$_SESSION["errorMessage"] = "Your session has timed out or<br>you have not logged in correctly.";
header ("Location: index.php");
exit();
?>

この問題は、ユーザーがログイン フォームを送信し、ログイン ページでリファラーが存在するかどうかを確認した後に発生します。ただし、正しいログイン情報を持っていることは既に確認済みです。

if(isset($_SESSION['redirect'])){
    header ("Location: ".$_SESSION['redirect']);
}else{
    header ("Location: menu.php");
}

論理的には、タイムアウトページが で変数を$_SERVER['HTTP_REFERER'];設定すると、timeout.php、この場合は displayData.php にリダイレクトされたページに設定されると思います。ただし、代わりに、それを displayData.php のリファラーに設定しているようです (これは何でもかまいませんが、ユーザーを送りたいものではありません)。

これは、HTTP_REFERER の意図した効果であり、ヘッダー リダイレクトがあった場合に更新されませんか? もしそうなら、それは最悪です。ログイン/タイムアウト システムを変更するには、約 80 個のファイルを書き直す必要があります。もっと簡単な方法があることを願っています。関数ベースのシステムでこれを行う予定でしたが、現在、レガシー コードを拡張しようとしています。

どうもありがとう。

編集:

ここでもう少し明確にします。フォルダー /admin/ にあると考えてください。displayData.php は、ログインすることによってのみアクセスできる多くのファイルの 1 つです (そのため、ログインしていないことが検出されたときにアクセスしようとしていた特定のページはわかりません)。これらのページはすべて、セッションが期限切れになると (またはセッションがまったくなかった場合)、timeout.php にリダイレクトされます。その情報を保存して、後でユーザーを当社のサイトで要求した元のページにリダイレクトするために使用できるようにします。

timeout.php ファイルを介して実行したい理由は、displayData.php と同じように多くのファイルがあり、必要がなければシステムを改善するためにそれらのすべてを編集したくないためです。当面。

これでも十分に明確でない場合は、お知らせください。

4

1 に答える 1

0

HTTP_REFERER は純粋に情報提供を目的としており、サーバーではなくブラウザーによって設定されます。これは、空白にすることも、まったく別のものにすることもできることを意味します。また、ユーザーが操作することもできます。できれば頼らない方がいいです。

$_SESSION['redirect']セッションチェックスクリプトにリダイレクトする前に、実際にページにいるときに設定しないのはなぜですか? さらに言えば、なぜリダイレクトするのですか?ほとんど変更されていない timeout.php をスクリプトに含め、$_SERVER['PHP_SELF']変数を使用して何$_SESSION['redirect']を設定するかを決定できます。

于 2011-05-05T22:00:51.350 に答える