- ベストアンサー
header('Location: http://www.exampl
header('Location: http://www.example.com/'); PHPによる上記リダイレクト処理を、ブラウザ側で拒否できるような機能は存在するのでしょうか? そもそもこのリダイレクト処理というのはサーバサイドで動いているものなのでしょうか? 仕組みがよくわかりません。 たとえばDBにデータを登録後、リダイレクトでメール送信処理ページへ飛ばし、ユーザに登録内容をメールで送る、ということをしても問題ないのでしょうか? とりあえず画面遷移を拒否される可能性があるかないかだけでも教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
サーバが出力するステータスコードに対してクライアント側がどのように対応するかは、クライアントプログラムに拠るものですから、当然期待する動作をしないという選択もあるでしょう。 相手方がブラウザであるとの前提からそのような画面遷移を期待するわけですが、処理の流れとして大変危ういことは言わずもがなです。 データベースへの登録とメール送信の手配は、ひとつのトランザクション内で完結する必要がある処理だと考えます。時間がかかるならキューに突っ込んで、その旨をレスポンスするだけで十分でしょう。 サーバ内で起こる事は把握できても、外でどう処理されるかは分からないということです。
その他の回答 (3)
Locationヘッダは、厳密なリダイレクトとは違ってたような? ただ実装の問題として、 リダイレクト頼みでメイル送信を始めるのは危険です。 ESCでロード停止したら、メイル配信が止まっちゃいますから。
- mizutaki
- ベストアンサー率33% (111/333)
その概念に詳しいサイトがあったはずなんですが、 どうしても見つからなかったので、ちょっと分かりにくいですが参考サイトを一つ。 HTTP文書を受け渡しする際に ユーザはサーバに対して「リクエストヘッダー」を送信します。 ・このサーバのこのフォルダにあるこのファイルをください ・こちらのアクセスブラウザはこういうバージョンで、こういう文字コードだとうれしい みたいな情報を送信して、 その情報を取得したサーバが、 「レスポンスヘッダー」をユーザに返す ・ファイルの種類やサーバのバージョン、ファイルのサイズにユーザにプレゼントするクッキー情報等 このレスポンスヘッダーに「location」という項目があり このlocationにurlが入っていた場合 普通のブラウザは今開こうとしているサイトを諦めて、location先に「リクエストヘッダー」を送信して、情報を取得します。 「レスポンスヘッダー」を受け取ったら最後に「レスポンス情報」が取得出来ます。 レスポンスヘッダーで「Content-Type」というものを取得出来るのですが、 ここが「text/html」ならレスポンス情報はhtmlとして 「image/gif」ならgifファイルとして ブラウザが解釈します。 たまにロケーション無視をしている人がいるかもしれませんし、 ロケーションを送った際に 「切り替わらなかったらここをリンク」 みたいな物を一緒に送っておくのもありです。
- yambejp
- ベストアンサー率51% (3827/7415)
>リダイレクト処理 まぁリダイレクト自体が、「うちじゃないよよそ行ってくれ」という宣言にすぎないので いうことを聞くかどうかはブラウザ次第ですね。 たいていのブラウザはまじめにいうことを聞くでしょうけど、特殊なプラグインなどで 回避しようと思えばできないこともない・・・しかし回避したからといって、 ユーザーは結局なにもできないのだから、回避する意味はない・・・という流れでしょうか。 >DBにデータを登録後、リダイレクトでメール送信処理ページへ飛ばし、ユーザに登録内容をメールで送る やってもよろしいんじゃないですか? ようは再読み込みなどで二重登録したくないということですよね? セッションと組み合わせながら、元のページにも戻りにくいような仕組みにすると いいかと思います。
お礼
偶然ですがburp proxy というツールを見つけました。 これはリクエストを毎回ストップさせてforwardボタンを押したら先に進むというものです。 こういうツールを使えばリダイレクトは簡単に拒否できてしまいますね。 やはり「データベースへの登録とメール送信の手配は、ひとつのトランザクション内で完結する」べきなようです。ありがとうございました。