2

header()リダイレクトのターゲットが、どのページがリダイレクトを開始したかを判別できる方法を見つける必要があります。ログインを検証するためにmod_auth_casハックを使用しています。mod_auth_casの背後にサイト全体を配置することはできないため、.htaccessにAuthTypeCasを含むサブディレクトリがあります。ログインの場合、/ casディレクトリへのリンクを指定し、casを処理し、返されたユーザーIDを$ _SESSIONに追加して、アクセス許可データベースと比較します。その後、ページはヘッダーでホームページにリダイレクトされます。

このダンスは、ホームページに戻るだけでうまく機能しますが、$ _ SESSIONにユーザーIDがない場合に、ログインが必要なページでcasにリダイレクトする必要があります。また、ユーザーがログインしてユーザーIDを取得すると、ホームページではなく、そこに送信したページにリダイレクトされます。また、ヘッダーリダイレクトの元のページを振り返るこの機能は、サイトの他の部分で便利です。

/cas/index.phpは、どのページがリダイレクトを開始したかをどのように判断できますか?ユーザーが複数のページを開いていると同時に、1つのページのcasにリダイレクトされ、2番目のページに移動してcasにリダイレクトされ、casが最初のページに戻って完了するという衝突を回避するにはどうすればよいですか?もう一度、最初のページではなく2番目のページにリダイレクトされますか?そして、このソリューションは純粋なPHPである必要があり、JavaScriptの追跡は必要ありません。

4

2 に答える 2

2

これを行うには、いくつかの方法があります。

-リダイレクト前のセッションに元のURLを保存する

-ログインページで、$ _ SERVER変数から参照URLを取得し、ログイン後にそのURLにリダイレクトします

-リダイレクトを調整して、ログインページのget / post変数に現在のURLを追加します--noaccess.phpはlogin.php?ret_url = noaccess.phpにリダイレクトします(おそらく完全なURLとURLエンコードを使用することをお勧めしますそれ)

于 2011-03-23T18:24:34.793 に答える
0

Without modifying or adding any code at all you can install the XDebug php extension and turn on profiling. It will spit out a cachegrind file containing info about the callstack. You can open it in something like kcachegrind to get a visual representation of when the call to header() happened.

于 2011-03-23T18:37:02.373 に答える