2011-08-10 10 views
2

あまりにも多くの運と答えを見つけるために少し読んでいました。ログイン後にページにリダイレクトしようとしていました

メンバーは匿名でサイトを閲覧できるサイトがありますが、一部のページは制限されています。私は、ログインページにリダイレクトされたメンバーを、ログインするために必要なリンクをクリックすると表示します。

私が直面してる問題は、私は、彼らが一度にログインするために取得しようとしていたページにメンバーをリダイレクトする方法がわからないです。

彼らは/profile.phtmlてもらうことにしようとした、それはそれらを/login.phtmlに送りました。ログインすると、ここをクリックすると、/profile.phtmlに送られます。彼らが/album.phtmlをクリックした場合、ログイン後に/album.phtmlにそれらを送ってほしい。

誰でも手助けできますか?どういうわけかセッションにURLを保存していますか?

非常に高く評価されています。

+0

クエリ文字列にURLを格納します。私はPHPを使用しないので、あなたにコードを与えることはできませんが、これはASP.Netがそれを行う方法です。ログインページには、login.aspx?returnurl = orginalpage.aspxのようなURLが返されます。その後、彼らがログインしてクエリ文字列のパラメータを読んで、ページにリダイレクト –

答えて

5

header("Location:")をリダイレクトする直前に、現在のページを$_SESSION['redirect_to']に保存してください。ログインに成功すると、別のheader()コールが元のページにリダイレクトされ、セッション変数が設定されていない場所に誤って再利用されることはありません。

$_SESSION['redirect_to'] = $_SERVER['REQUEST_URI']; 
header("Location: http://example.com/login.php"); 
exit(); 

// On successful login 
$redirect = $_SESSION['redirect_to']; 
// unset the session var 
unset($_SESSION['redirect_to']); 
header("Location: http://example.com/$redirect"); 
exit(); 
+0

私はそれがブラウザ自体によってサポートされている何かのための仕事とセッションストレージの不必要な量だと思う。 – vicTROLLA

+0

美しい魅力的な作品!ありがとうございました。もし私がこれを考えていれば...そのような単純な概念。ありがとうございました! – Darius

0

他の人が示唆しているように、セッション変数を使用できます。しかし、私はむしろHTTP_REFFERERに頼っています。ここの欠点は、すべてのブラウザがリファラーを送信するわけではありませんが、ほとんどの主要なブラウザがそうしています。それはHTTP標準の一部であり、十分だと思います。あなたのログインスクリプトにこれを貼り付けてください。

if(!empty($_SERVER['HTTP_REFERER'])) { header('Location: '.$_SERVER['HTTP_REFERER']); } 
+0

あなたが言ったように、特にHTTPSを使っているときは、 'HTTP_REFERRER'は空であることがよくあります。多くのブラウザでは、https経由でリファラーを送信することはありません。 –

+0

@Michaelこれは、参照元と新しい場所が安全でない場合にのみ発生します。セッションが全面的にHTTPSである場合、参照者が入力されていることがわかります。 – vicTROLLA

関連する問題