Контроллеры CodeIgniter загружают дважды при использовании параметров в URL - PullRequest
5 голосов
/ 16 сентября 2011

У меня проблема с тем, что мои контроллеры CodeIgniter вызываются дважды.Кажется, это происходит только когда я использую параметры в URI (/ newsletter / verify / a1938cas893vf9384f0384f0943).Если я удаляю параметр из своей функции, он загружает контроллер только один раз.Я также заметил, что с параметром в URL, если я обновляю страницу, она загружается только один раз.Таким образом, кажется, что он загружается дважды только при вызове новой страницы.

Например, переход в / newsletter / verify / a123 в первый раз приведет к его загрузке дважды.Но если вы обновите / newsletter / verify / a123, он загрузится только один раз.Я завершил закомментированные вызовы моего представления, чтобы устранить проблему с вызывающим его видом.

Похоже ли это на проблему с кешем или что-то в моем файле .htaccess?Спасибо за любые предложения.

Соответствующий контроллер:

<?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 файл:

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

Вот как выглядит файл журнала, вы можете видеть все, что происходитдважды перезагрузил:

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

Ответы [ 4 ]

8 голосов
/ 20 ноября 2012

Обычно это вызвано тем, что «грязные» шаблоны делают фиктивные вызовы CSS, Javascript и изображений.

Лучше всего попытаться предотвратить это, тщательно проверив все вызовы ресурсов в ваших шаблонах, но если кто-то другой делает шаблоны, это иногда не вариант.

Вот что я сделал в этом случае:

Проверка, совпадает ли HTTP_REFERRER с REQUEST_IRI. Если это так, вы знаете, что это то, что вызывается с той же страницы, которая загружена в данный момент, таким образом, у вас есть фиктивный вызов отсутствующего ресурса.

Я помещаю следующий код вверху, если контроллер (этот код также работает в файле точки входа 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...
   }
1 голос
/ 18 сентября 2011

Я не знаю, файл ли это .htaccess, но я использовал это некоторое время и никогда не сталкивался с проблемой:

 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]

Я бы сказал, что сначала просто измените файл и посмотрите, решит ли это проблему, а также убедитесь, что в вашем файле config.php переменная index_page пуста, например:

 $config['index_page'] = '';

еще одна вещь, вы определяете какие-либо маршруты в вашем файле rout.php? Может быть, они вызывают какой-то странный цикл, который загружает страницу дважды.

0 голосов
/ 04 марта 2019

У меня была похожая проблема (загрузка контроллеров дважды, но не связанная с параметрами), и для меня проблема заключалась в том, что кто-то загрузил минимизированный файл js, в то время как неминифицированная версия уже загружалась.

После удаления минифицированной версии она начала нормально работать.

0 голосов
/ 25 июля 2013

Ответ Питера приблизит вас, но если вы когда-нибудь перенаправите с URL на тот же URL, он остановится и приведет к пустой странице.Существует также проблема с использованием кнопки назад в браузере.Можем ли мы справиться с этим лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...