2009-04-15 10 views
6

Tôi đang cố gắng bật SSL chỉ cho một số hành động nhất định trên trang web dựa trên CakePHP của tôi. Tôi đang làm điều này bằng cách sử dụng requireSecure() và chuyển hướng đến https://url trong blackHoleCallback tương ứng().Bật lọc có chọn lọc cho một số hành động nhất định trong CakePHP

Để giảm tải máy chủ, tôi muốn chuyển hướng trở lại http://whatever_url sau khi người dùng hoàn tất hành động yêu cầu SSL.

Làm cách nào để thực hiện việc này?

Trả lời

6

Vì vậy, đây là một giải pháp mà tôi đã đến. Tôi thêm đoạn mã sau để beforeFilter() trong AppController:

if (!in_array($this->action, $this->Security->requireSecure) and env('HTTPS')) 
    $this->_unforceSSL(); 

Các hàm được định nghĩa là:

function _unforceSSL() { 
    $this->redirect('http://' . $_SERVER['SERVER_NAME'] . $this->here); 
} 
3

Hãy chắc chắn để sử dụng một cookie mà đòi hỏi một kết nối an toàn cho các trang an toàn, và một cookie bình thường cho các trang không an toàn. Bằng cách này, nếu ai đó chụp cookie không an toàn, họ sẽ không thể chiếm đoạt bất kỳ thông tin nhạy cảm nào.

2

điều tôi không thích với cách tiếp cận chuyển hướng là người dùng vẫn truy cập url không an toàn và chỉ sau khi người này được chuyển hướng.

tôi muốn một cái gì đó thực hiện tại HTML-> link/url mức mà tùy thuộc vào những gì bạn vượt qua một liên kết ssl/phi ssl được trả lại, một cái gì đó tương tự với: http://cakephp.1045679.n5.nabble.com/Re-Login-through-HTTPS-on-CakePHP-td1257438.html mà còn sử dụng các thành phần an toàn

sau chỉnh sửa, tôi đã làm điều gì đó dễ dàng hơn mà chỉ cần thực hiện công việc của mình, tôi cố gắng tạo một ví dụ đơn giản (đừng quên định nghĩa MYAPP_SECURE_URL trong config/core.php hoặc bootstrap.php): trong ứng dụng tôi đã tạo app_helper. php:

class AppHelper extends Helper { 
    function url($url = null, $full = false) { 
     if($url['action'] == 'login' && $url['controller'] == 'users') { 
      return MYAPP_SECURE_URL.'/users/login'; 
     } 
     return h(Router::url($url, $full)); 
    } 
}