2011-09-16 10 views
5

Tengo un problema por el cual mis controladores CodeIgniter se llaman dos veces. Parece que solo ocurre cuando estoy usando parámetros en el uri (/ newsletter/confirm/a1938cas893vf9384f0384f0943). Si elimino el parámetro de mi función, solo carga el controlador una vez. También noté que con el parámetro en la url, si actualizo la página, solo se carga una vez. Parece que se está cargando dos veces solo cuando se llama a una nueva página.Controladores CodeIgniter que se cargan dos veces al usar parámetros en la dirección URL

Por ejemplo, si navega por/newsletter/confirm/a123 por primera vez, se cargará dos veces. Pero si tuviera que actualizar/newsletter/confirm/a123 solo se cargará una vez. He completado llamadas comentadas a mi vista para eliminar un problema con la vista que lo causa.

¿Esto suena como un problema de caché, o algo en mi archivo .htaccess? Gracias por cualquier sugerencia.

importantes del regulador:

<?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); 
     } 

    } 

} 

?> 

archivo .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 

Esto es lo que el archivo de registro se parece, se puede ver todo lo que se vuelve a cargar dos veces:

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

Registra mensajes a algún lado. La clase padre del controlador hace lo mismo en su función __construct, de modo que en su registro de errores obtiene dos mensajes de error que dicen "Mi controlador se inicializó" y dos mensajes de error que dicen "Clase de controlador inicializada" - ¿Sí? –

+0

Sí, Calle, pero esas no son las únicas cosas que se cargan dos veces, todo se carga dos veces y se envía al navegador. Copié mi publicación original con el aspecto de mi registro cuando se carga dos veces. – aberrant

Respuesta

1

I no sé si es su .htaccess, archivo, pero lo he usado por un tiempo y nunca tuve un problema:

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] 

yo diría que acaba de cambiar el archivo primero y ver si se soluciona el problema, también, asegúrese de que en su archivo config.php la variable index_page está en blanco así:

$config['index_page'] = ''; 

otra cosa, ¿está definiendo alguna ruta en su archivo routes.php? Tal vez están causando un bucle extraño que está cargando la página dos veces.

8

En general, esto es causado por plantillas "sucias" que realizan falsas llamadas CSS, Javascript y de imágenes.

Lo mejor es tratar de evitar que esto suceda inspeccionando cuidadosamente todas las llamadas de recursos en sus plantillas, pero si alguien más está haciendo las plantillas que a veces no es una opción.

Aquí es lo que hice en ese caso:

Verificando HTTP_REFERRER es el mismo que el REQUEST_IRI. Si es así, sabe que se trata de algo que se llama desde la misma página que está cargada actualmente, por lo que tiene una llamada falsa a un activo perdido.

Coloque el siguiente código en la parte superior si el controlador (este código también funciona en el archivo de punto de entrada 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

respuesta de Pedro le acerca, pero si alguna vez redirección desde una URL a la misma URL que va a detener y dar como resultado una página vacía. También hay un problema con el uso del botón Atrás en el navegador. ¿Podemos manejar esto mejor?

Cuestiones relacionadas