使用CakePHP 1.3,我们为酒店客房预订系统。支票可用表格应将用户带到安全的支付页面(https://secure.domain.com/bookings/payment)。付款后,用户获得一个确认页面(安全也没问题),但是从这里开始,页眉/页脚中的任何链接都应该将用户带回非安全域(http://domain.com)。
目前,我们已为域https://secure.domain.com和https://domain.com设置了SSL UCC证书。我们还对检查可用性表单进行了硬编码,以运行操作https://secure.domain.com/bookings/payment。因此,我们可以让用户进入HTTPS安全区域,但不会退出,除非我们对该部分中的所有链接进行硬编码。
Cake的安全组件非常混乱,因此我正在寻找实现这一目标的最佳解决方案。
Can Cake的安全组件可用于HTTPS支付页面,使生活更轻松,并使代码更加标准化吗?还有其他建议吗?
答案 0 :(得分:1)
这是一个非常好的方法:http://techno-geeks.org/2009/03/using-the-security-component-in-cakephp-for-ssl/所以你甚至不需要硬编码。
答案 1 :(得分:0)
我使用了http://techno-geeks.org/2009/03/using-the-security-component-in-cakephp-for-ssl/中的示例,但发现它存在问题。我最终将以下内容添加到我的app_controller.php。
以下代码将HTTPS重定向到www.example.com,将HTTP重定向到example.com。如果用户已登录(请参阅$loggedUser
),则会为每个连接强制使用HTTPS。
// Pages requiring a secure connection.
$secureItems = array();
// beforeFilter
function beforeFilter() {
// Your logic...
$this->__checkSSL();
}
/**
* Check SSL connection.
*/
function __checkSSL() {
/** Make sure we are secure when we need to be! **/
if (empty($this->loggedUser)) {
if (in_array($this->action, $this->secureItems) && !env('HTTPS')) {
$this->__forceSSL();
}
if (!in_array($this->action, $this->secureItems) && env('HTTPS')) {
$this->__unforceSSL();
}
} else {
// Always force HTTPS if user is logged in.
if (!env('HTTPS')) {
$this->__forceSSL();
}
}
}
/**
* Redirect to a secure connection
* @return unknown_type
*/
function __forceSSL() {
if (strstr(env('SERVER_NAME'), 'www.')) {
$this->redirect('https://' . env('SERVER_NAME') . $this->here);
} else {
$this->redirect('https://www.' . env('SERVER_NAME') . $this->here);
}
}
/**
* Redirect to an unsecure connection
* @return unknown_type
*/
function __unforceSSL() {
if (strstr(env('SERVER_NAME'), 'www.')) {
$server = substr(env('SERVER_NAME'), 4);
$this->redirect('http://' . $server . $this->here);
} else {
$this->redirect('http://' . env('SERVER_NAME') . $this->here);
}
}