0

いくつかのセクションを安全にする必要があるサイトがあります。SSL 証明書がインストールされており、メニュー項目からアクセスできる領域については問題ありません。メニュー項目エディタで SSL Enabled システム パラメータを使用するだけです。しかし、いくつかのセクション (つまり、ショッピング カートのチェックアウト画面) は、送信ボタンを介してのみアクセスできます (それらには独自の URL がありません。いわば、コントローラーを介して自分自身に送信され、ビューが変更されるだけです)。フォーム アクションに基づいています。) 現在、フォーム アクションは次のように設定されています。

<form name="instantForm" action="/<?=$this->segment?>/" method="post" onsubmit="updateSubmitValue()">

ここで、セグメントは view.html.php を介して渡されます。レンダリングされたフォーム タグは次のようになります。

<form id = "checkoutForm" name="checkoutForm" action="/checkout/" method="post" onsubmit="updateSubmit()">

送信されると、コントローラーは送信されたいくつかのフィールドの値を取得し、表示するビュー (保存されたアカウント情報または匿名トランザクションでログイン) を決定してから、正しいフォームを表示します。

以下は、コントローラーの display メソッドの簡略版です。

if (JRequest::getVar('checkoutCodeSubmitBTN') != ""){
   //user has clicked Checkout button; go to billing info page
   JRequest::setVar('view','checkoutpay');
   // JRequest::setVar('view','checkout_thankyou');

   //reference view
   $viewCode =& $this->getView('checkoutpay','html');
   $viewCode->voucher =& $voucher;
} //close test for step 1 if

表示されるビューが https URL に切り替わることを確認するにはどうすればよいですか?

私はすでにこれを google joomla dev ディスカッション グループに投稿しており、JRoute を使用して URL を生成し、フォームに投稿する代わりに setRedirect を使用するようにという応答を受け取りましたが、他の誰かが、JRoute を使用するとまったく新しい要求が生成されると応答しました。 、そのため、JRequest::getVar タイプのものへのアクセスはすべてなくなりました。フォームから投稿された変数にアクセスできるようにする必要があるため、解決策はありません。これを行う他の方法はありますか?私は Joomla 開発にかなり慣れていないため、利用可能なオブジェクトやメソッドの多くに慣れていません。

4

1 に答える 1

0

これにはJRouteの方が適しているという人もいますが、それは必要なURLがわかっている場合にのみ機能します。現在のリクエストに基づいて URL を動的に作成する必要があるため、JURI を使用しました。

view.html.php に、次のコードを追加しました。

$needSecure = $model->needSecure();
    if($needSecure) {
        $u =& JURI::getInstance( JURI::base() );
        $u->setScheme( 'https' );
        $tmpURL =  $u->toString()."checkout";
    }
    else {
        $tmpURL = "/checkout";
    }
$this->assignRef("tmpURL", $tmpURL);

needSecure() は、データベース テーブルから値を取得してブール値を返す私のモデルの関数です。したがって、needSecure が true を返す場合、現在のリクエスト URI を取得し、最初の部分を https に設定してから、送信先のビットを追加します。false が返された場合は、送信先のビットを設定するだけです。

default.php には、次のようなものがあります。

<form id = "checkoutForm" name="checkoutForm" action="<?=$this->tmpURL?>/" method="post" onsubmit="updateSubmit()">

needSecure が true の場合、アクションはレンダリングされます

<form id = "checkoutForm" name="checkoutForm" action="https://www.mysite.com/checkout" method="post" onsubmit="updateSubmit()">

それ以外の場合はレンダリングされます

<form id = "checkoutForm" name="checkoutForm" action="/checkout" method="post" onsubmit="updateSubmit()">

これは完全に機能し、ブール値をデータベースに保存しているため、新しいフォーム送信を安全または安全でないものにしたい場合でも、コード自体を変更する必要はありません.

于 2010-10-14T17:13:03.300 に答える