私が開発しているアプリケーションでは、ページの初期読み込み時に隠された入力変数が設定されています。変数はすべてのページでアクセスする必要があります。これらをセッション変数に変換しない理由は、ユーザーが別のパラメーターで別のブラウザーを開き、その値を隠し入力として渡すことで問題なく動作するためです。これらの隠された入力を取り除くために最良の可能な選択肢は何ですか。私はすべての変数を構造に変換しようとしましたが、構造は後続のページで利用できるようにフォーム提出の一部として投稿する必要があります。このアプリはフレームの使用です。投稿するコードはありません。ColdFusionで構造体への隠しフォーム変数の変換
0
A
答えて
1
同じWebセッションに関連付けられているさまざまなブラウザインスタンスで、それぞれ異なるデータセットを維持したいと思うように聞こえます。 form
またはurl
という変数を周りに渡すことでこれを行うのは悪い考えです。
使用できるアプローチの1つは、onSessionStart(または必要に応じて)で、ユーザーセッションでデータのインスタンスを保持する構造を作成することです。例えば
session.data = {
someRandomKey: {
valueA: 42,
valueB: "Porridge"
}
}
は、それからちょうど隠しform
フィールドまたはクエリ文字列パラメータとしてsomeRandomKey
を渡します。ここで、フォームを送信して変数を更新するときは、隠しフォームフィールドのIDを使用して、session.data
から適切な構造を見つけます。
ユーザーがこのフォームの新しいインスタンスを必要とする場合は、リンクやボタンのように、新しいユニークキーを作成し、このキーを使用して構造体をsession.data
に挿入し、必要に応じてそれを設定します新しいidに沿って渡されるフォームを、隠しフォームフィールドまたはクエリーコードのparamとして再度読み込みます。
あなたが望むものを決める必要があります。非表示の入力変数は、フォームの送信を通じてColdFusionでのみ使用できます。セッション変数は、後続のページでデータを利用できるようにするために必要ですが、新しいブラウザを開いたときに言及した注意点があります。多分私はあなたの質問を理解していませんか? –
あなたは正しいです...隠された入力はセキュリティリスクになりやすいですが...これらのフォーム変数を渡すための他の方法がありますか?今、私はすべての隠された入力のエンコードされたjson文字列を保持する新しい隠し変数を作成しました。しかし、新しい変数は再び隠された入力です – DG3
これらの変数の元々の値がユーザの入力から来たのであれば、どういうことを心配していますか?セッションスコープを使用する代わりに –