代码之家  ›  专栏  ›  技术社区  ›  EmmyS

如何将ssl/https与非菜单项一起使用?

  •  0
  • EmmyS  · 技术社区  · 14 年前

    我们有一个网站,需要有几个部分是安全的。我们有 我们安装的SSL证书,以及可访问的区域 通过菜单项,没问题-我们只使用支持SSL的系统 菜单项编辑器中的参数。但是我们有几个部分 购物车结帐屏幕)。 按钮(他们没有自己的网址,可以说,他们只是 通过控制器提交给自己,视图根据 在表单操作。)现在,表单操作的设置如下:

    <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开发的新手,不熟悉许多可用的对象和方法。

    1 回复  |  直到 14 年前
        1
  •  0
  •   EmmyS    14 年前

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

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