Webアプリケーションをプログラミングしていると、さまざまなタイミングで強制的に別のページに遷移させたい場面に遭遇します。
例えば、
ColdFusionには<cflocation>タグが用意されています。このタグを使用すると、タグを記述した箇所でColdFusionの処理が停止し、指定したURLに移動するために、ブラウザに応答コード30xを戻し、リダイレクト(遷移)させることができます。
<cflocation url="ブラウザ側で強制的に移動させたいURL">
下記の例は、データベースにデータを挿入(INSERT)するページの例です。ここでは2か所で<cflocation>タグが使われています。一つは、Form変数が存在するかをチェックして、Form変数が存在していないときに強制的に入力ページに戻す処理、そしてもう一つはデータベースへの登録処理が終わった後に、強制的に作品一覧ページに移動する処理です。
<cfif Not IsDefined("Form.SUBMIT")> <!---フォームをサブミットせず直接SUBMIT先ページをリクエストしてきたので、 強制的に入力ページに移動させる ---> <cflocation url="art_regist.cfm" addtoken="false"> </cfif> <!---データベースに新しい作成を追加(INSERT)する ---> <cfquery datasource="cfartgallery" name="qArt"> INSERT INTO ART (.....) VALUES (......) </cfquery> <!---処理が終わったら、一覧ページに移動させる ---> <cflocation url="art_location.cfm" addtoken="false">
<cflocation>タグの処理が実行されると、ページの処理はその時点で中断し、リクエスト元のブラウザに応答コード30xで戻します。30xはリダイレクションを意味し、ブラウザはその応答コードを受け取ると、指定されたURLにリダイレクト(遷移)します。応答コードは、<cflocation>タグの statusCode 属性でセットできます。応答コードの詳細については、下記のwikipedia記事などを参照下さい。
(参考: HTTPステータスコードのwikipedia記事)
デフォルトの状態で<cflocation>タグを使用すると、指定した遷移先ページに移動した後に、URLの後ろにColdFusionのセッション情報が付加される場合があります。 これは、<cflocation>タグが実行されたページが、セッションが有効なColdFusionアプリケーション内に置かれている時に発生します。
例) http://127.0.0.1:8500/art_regist.cfm?CFID=4600&CFTOKEN=dd3fe92e894946bc-72B585EE-8C73-6E7B-1862F124627B7C2A
ColdFusionは、セッション機能の管理にブラウザのCookieを利用しますが、過去のブラウザや一部の携帯用ブラウザでリダイレクト時にCookie情報が付加されずセッションが維持できないため、その対応としてURLパラメーターにセッション情報を付加する方法が行われていました。ただ、このURLでセッションを維持する方法は、昨今のブラウザやスマートフォンではCookieが対応しているため、不要な事が多いです。URLパラメーターに不要な情報を付加することを避ける目的で、<cflocation>タグに addtoken="no" を付加しましょう。
例: <cflocation url="リダイレクト(遷移)先URL" addtoken="no">