2011-09-16 33 views
5

Tôi đang gặp sự cố trong đó bộ điều khiển CodeIgniter của tôi đang được gọi hai lần. Nó chỉ có vẻ xảy ra khi tôi đang sử dụng các thông số trong uri (/ newsletter/confirm/a1938cas893vf9384f0384f0943). Nếu tôi loại bỏ các tham số từ chức năng của tôi nó chỉ tải bộ điều khiển một lần. Tôi cũng nhận thấy rằng với tham số trong url, nếu tôi làm mới trang, nó chỉ tải một lần. Vì vậy, có vẻ như nó đang tải hai lần chỉ khi một trang mới được gọi.Bộ điều khiển CodeIgniter Đang tải hai lần khi sử dụng tham số trong URL

Ví dụ: điều hướng đến/bản tin/xác nhận/a123 lần đầu tiên sẽ dẫn đến tải hai lần. Nhưng nếu bạn đã làm mới/bản tin/xác nhận/a123 nó sẽ chỉ tải một lần. Tôi đã hoàn thành nhận xét các cuộc gọi đến chế độ xem của mình để loại bỏ vấn đề với chế độ xem gây ra nó.

Điều này có âm thanh như vấn đề về bộ nhớ cache hoặc nội dung nào đó trong tệp .htaccess của tôi không? Cảm ơn mọi lời đề nghị.

điều khiển liên quan:

<?php 
error_reporting(-1); 
    ini_set('display_errors',1); 
class Test extends CI_Controller { 

    function __construct() { 
    parent::__construct(); 
     log_message('debug', 'MyController initialised'); 
    } 

    function confirm($code) 
    { 
     $this->load->helper(array('form')); 

     //$code = "6e930fe882c3b15712158812769dbcb636f96b8c"; 
     $result = $this->db->get_where('newsletter_members', array('nm_confirmation_code' => $code, 'nm_subscribed' => 0)); 

     if ($result->num_rows == 0) 
     { 
      $newsletter_message['newsletter_message'] = "Confirmation code is invalid or has already been confirmed."; 
      //$this->load->view('index_test', $newsletter_message); 
     } else { 
      $newsletter_message['newsletter_message'] = "Thank you for confirming your intent to subscribe to our newsletter!"; 
      $data = array(
        'nm_subscribed' => 1, 
        ); 
      $this->db->where('nm_confirmation_code', $code); 
      $this->db->update('newsletter_members', $data); 
      //$this->load->view('index_test', $newsletter_message); 
     } 

    } 

} 

?> 

.htaccess file:

RewriteEngine On 
RewriteCond $1 !^([^\..]+\.php|robot\.txt|public|images|css|js|paul|event_docs|blog|citeforme|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

# BEGIN WordPress 
#<IfModule mod_rewrite.c> 
#RewriteEngine On 
#RewriteBase/
#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 
#RewriteRule . /index.php [L] 
#</IfModule> 
#RewriteEngine Off 
# END WordPress 

Dưới đây là những gì các tập tin đăng nhập có vẻ như, bạn có thể nhìn thấy tất cả mọi thứ đã được nạp lại hai lần:

DEBUG - 2011-09-16 09:59:34 --> Config Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Hooks Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Utf8 Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> UTF-8 Support Enabled 
DEBUG - 2011-09-16 09:59:34 --> URI Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Router Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Output Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Input Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Global POST and COOKIE data sanitized 
DEBUG - 2011-09-16 09:59:34 --> Language Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Loader Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Database Driver Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Controller Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> MyController initialised 
DEBUG - 2011-09-16 09:59:34 --> Helper loaded: form_helper 
DEBUG - 2011-09-16 09:59:34 --> Final output sent to browser 
DEBUG - 2011-09-16 09:59:34 --> Total execution time: 0.0223 
DEBUG - 2011-09-16 09:59:34 --> Config Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Hooks Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Utf8 Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> UTF-8 Support Enabled 
DEBUG - 2011-09-16 09:59:34 --> URI Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Router Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Output Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Input Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Global POST and COOKIE data sanitized 
DEBUG - 2011-09-16 09:59:34 --> Language Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Loader Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Database Driver Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> Controller Class Initialized 
DEBUG - 2011-09-16 09:59:34 --> MyController initialised 
DEBUG - 2011-09-16 09:59:34 --> Helper loaded: form_helper 
DEBUG - 2011-09-16 09:59:34 --> Final output sent to browser 
DEBUG - 2011-09-16 09:59:34 --> Total execution time: 0.0213 
+0

Bạn đăng nhập vào một nơi nào đó. Lớp cha điều khiển thực hiện giống như hàm __construct của nó, vì vậy trong nhật ký lỗi của bạn, bạn nhận được hai thông báo lỗi có nội dung "Bộ điều khiển của tôi khởi tạo" và hai thông báo lỗi cho biết "Lớp điều khiển được khởi tạo" - có? –

+0

Có, Calle, nhưng đó không phải là những thứ duy nhất đang được tải hai lần, mọi thứ đang được tải hai lần và được gửi đến trình duyệt. Tôi upaded bài viết ban đầu của tôi với những gì đăng nhập của tôi trông giống như khi nó tải hai lần. – aberrant

Trả lời

1

tôi không biết đó là tệp .htaccess của bạn, nhưng tôi đã sử dụng nó một lúc và chưa bao giờ gặp vấn đề:

RewriteEngine On 
RewriteBase/

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 

tôi muốn nói chỉ cần thay đổi các tập tin đầu tiên và thấy rằng nếu giải quyết được vấn đề này, cũng có thể, hãy chắc chắn rằng trong file config.php của bạn biến index_page là trống như thế này:

$config['index_page'] = ''; 

một điều khác, bạn có định nghĩa bất kỳ tuyến đường nào trong tệp routes.php của mình không? Có thể họ đang gây ra một số vòng lặp lạ đang tải trang hai lần.

8

Nói chung điều này là do các mẫu "bẩn" làm cho các lệnh gọi CSS, Javascript và hình ảnh không có thật. Tốt nhất là cố gắng ngăn chặn điều này xảy ra bằng cách cẩn thận kiểm tra tất cả các cuộc gọi nội dung trong các mẫu của bạn, nhưng nếu ai đó đang thực hiện các mẫu mà đôi khi không phải là một tùy chọn.

Đây là những gì tôi đã làm trong trường hợp đó:

Kiểm tra nếu HTTP_REFERRER là giống như REQUEST_IRI. Nếu bạn biết đó là một cái gì đó đang được gọi từ cùng một trang hiện đang được tải, do đó bạn có một cuộc gọi không có thật với một tài sản bị thiếu.

Tôi đặt mã sau ở trên cùng nếu bộ điều khiển (mã này cũng hoạt động trong tệp điểm nhập index.php).

$self_referrer = $_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 

    if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == $self_referrer){ 
     return; // no point in going further since this is a bogus call... 
    } 
0

Câu trả lời của Peter giúp bạn đóng, nhưng nếu bạn chuyển hướng từ url đến cùng url, nó sẽ dừng lại và dẫn đến một trang trống. Ngoài ra còn có một vấn đề với việc sử dụng nút quay lại trong trình duyệt. Chúng ta có thể xử lý điều này tốt hơn không?

Các vấn đề liên quan