7

ユーザーによるログインに成功した後、リダイレクトを設定するのに苦労しています。

ログイン ページは、ユーザーが正常にログインした後、アクセスを拒否されたページにユーザーをリダイレクトする必要があります。

たとえば、ユーザーがログイン前 (セッションなし) に [マイ アカウント] をクリックすると、ログイン ページに正常にリダイレクトされますが、ログインした後、[マイ アカウント] ページに戻すにはどうすればよいですか?

私が試した方法には、$_SESSION['HTTP_REFERER].

どんな助けでも大歓迎です。

4

5 に答える 5

9

$_SERVER['HTTP_REFERER']ユーザーがログインしようとしたときにエラー (パスワードが間違っているなど) を受け取った場合、リファラーが同じログイン ページになるため、使用は危険です。ユーザーをログイン ページにリダイレクトする前にセッション変数内にバック URL を保存し、ログインに成功したら、保存されているバック URL にリダイレクトする必要があります。

たとえば、を保護する必要があるとpage.phpします。ファイルの先頭に次のようなものを含めることができます。

if (empty($_SESSION['user'])) {
    $_SESSION['backURL'] = $_SERVER['REQUEST_URI'];
    header('Location: login.php');
    exit;
}

次に、ユーザーが正常にログインした後、$_SESSION['user']変数を設定し、保存した URL にリダイレクトしてから、ログイン ページ (またはバック URL が保存されていない場合はサイトのルート) に送信することができます。理由はともかく):

$backURL = empty($_SESSION['backURL']) ? '/' : $_SESSION['backURL'];
unset($_SESSION['backURL']);
header('Location: ' . $backURL);
exit;
于 2012-04-22T22:40:43.320 に答える
1

これを試して:

<?php
  header("Location: " . $_SERVER["HTTP_REFERER"]);
?>
于 2012-04-22T22:41:37.983 に答える
1

リダイレクトを行うページで、そのページの URL であるセッション変数を設定します。

session_start();
if (!$logged_id)
{
    $_SESSION['redirect_url'] = $_SERVER['PHP_SELF']; 
    header('Location: login.php');
    exit;
}

次に、ログインに成功した後、その URL にリダイレクトします。

session_start();

/* Login code goes here */

$redirect_url = (isset($_SESSION['redirect_url'])) ? $_SESSION['redirect_url'] : '/';
unset($_SESSION['redirect_url']);
header("Location: $redirect_url", true. 303);
exit;
于 2012-04-22T22:45:49.017 に答える
0

$_SESSION["last_page"](exclude login page)のような変数で最後にアクセスしたページを記憶する必要があります。ユーザーが正常にログインした後、変数の値を取得し、ユーザーを以前の場所にリダイレクトします。

リファラーを使用することはできません。たとえば、ユーザーが最初のログイン試行に失敗した場合、2 回目の試行ではログイン ページがリファラーになります。

もう 1 つの方法は、別のログイン ページなしで ajax を使用してユーザーを認証することです。ログインが成功した場合は、javascript でページを更新するだけです。

于 2012-04-22T22:47:49.487 に答える
0
header("Location: " . $_SERVER["HTTP_REFERER"]);

それを行いますが、注意してください:

カスタム ヘッダーを送信する前に、何も出力 (、、など) することはできませんechoprint_r

于 2012-04-22T22:43:36.383 に答える