2010-10-13 46 views
0

我們有一個網站,需要有幾個部分是安全的。我們已經安裝了 我們的SSL證書,並且通過菜單項可訪問 的區域,這不成問題 - 我們只是在菜單項編輯器中使用啓用SSL的系統 參數。但我們有幾個部分(即 購物車結賬屏幕),只能通過提交 按鈕訪問(他們沒有自己的URL,可以這麼說 - 他們只是通過控制器提交給自己的 )上的形式動作基於 視圖改變)現在,形式操作設置是這樣的:如何將SSL/https與非菜單項一起使用?

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

其中段經由view.html.php通過。所呈現的形式標籤 看起來像這樣:

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

提交時,控制器抓住幾個提交 字段的值,並確定哪個視圖來顯示(與保存 帳戶信息或匿名交易登錄),然後顯示正確的 表單。

這裏的控制器的顯示方法的精簡版本:

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開發相當陌生,對許多可用的對象和方法並不熟悉。

+0

您正在使用哪種購物車擴展程序? – 2010-10-14 12:49:00

+0

我們自己建造的一個。我弄清楚了這一點;我會在幾分鐘後發佈答案。 – EmmyS 2010-10-14 17:01:08

回答

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,我們只需設置要提交的位。

在默認情況下。PHP的,我們有這樣的:

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

如果needSecure是真實的,動作呈現給

<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()"> 

它完美,因爲我們存儲數據庫中的布爾值,這意味着如果我們想要使新的表單提交安全或不安全,我們永遠不需要更改代碼本身。

相關問題