【问题标题】:How to use SSL/https with non-menu items?如何将 SSL/https 与非菜单项一起使用?
【发布时间】:2011-04-25 02:28:23
【问题描述】:

我们有一个网站需要有几个部分是安全的。我们有 我们的 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()">

提交时,控制器抓取几个提交的值 字段并确定要显示的视图(使用已保存登录 帐户信息或匿名交易),然后显示正确的 表格。

这是控制器显示方法的精简版:

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 开发讨论组上发布了这个,并得到了一个回复,告诉我使用 JRoute 生成一个 URL 并使用 setRedirect 而不是发布到表单,但是后来其他人回复说使用 JRoute 会产生一个全新的请求,因此您对 JRequest::getVar 类型内容的所有访问权限都消失了。我们需要能够访问通过表单发布的变量,这样解决方案就出来了。有没有人有其他方法可以做到这一点?我对 Joomla 开发还很陌生,对许多可用的对象和方法并不熟悉。

【问题讨论】:

  • 您使用的是什么购物车扩展程序?
  • 我们自己建造的。我确实想通了;我会在几分钟后发布答案。

标签: joomla joomla-extensions


【解决方案1】:

我从一些人那里听说 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()">

它运行良好,而且因为我们将布尔值存储在数据库中,这意味着如果我们想要使新表单提交安全或不安全,我们不必更改代码本身。

【讨论】:

    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2019-11-06
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多