如何在非菜单项中使用SSL / https?

时间:2010-10-13 21:36:46

标签: joomla joomla-extensions

我们有一个网站需要有几个部分是安全的。我们有 我们安装了SSL证书,以及可访问的区域 通过菜单项,没问题 - 我们只使用SSL Enabled系统 菜单项编辑器中的参数。但我们有几个部分(即a 购物车结帐屏幕)只能通过提交进行访问 按钮(他们没有自己的URL,可以这么说 - 他们只是 通过控制器提交给自己并基于视图更改 在表单操作上。)现在,表单操作设置如下:

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

其中segment通过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网址?

我已经在google joomla dev讨论组上发布了这个,并得到一个回复​​告诉我使用JRoute生成一个URL并使用setRedirect而不是发布到表单,但随后其他人回复说使用JRoute生成一个全新的请求,所以你对JRequest :: getVar类型的所有访问都消失了。我们需要能够访问通过表单发布的变量,以便解决方案。有没有人有其他方法这样做?我对Joomla开发很新,并且不熟悉许多可用的对象和方法。

1 个答案:

答案 0 :(得分: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()">

它完美地工作,并且因为我们将布尔值存储在数据库中,这意味着如果我们想要使新表单提交安全或不安全,我们就不必更改代码本身。