2013-05-17 15 views
5

Qual è il modo più sicuro per verificare se un utente ha effettuato l'accesso? Sto usando framework php, codeigniter.verifica se un utente ha effettuato il login

$loggedIn = $this->session->userdata('is_logged_in'); // returns 1 
if($loggedIn == true): ?> 
    // do something 
<?php endif; ?> 

importa se questo codice è nel controller o in una vista?

risposta

0

Il codice è posizionato meglio in un controller in modo da poter mostrare la vista corretta in base al fatto che l'utente sia connesso o meno. Sicuro? Cosa stai cercando di evitare? Con CI è il modo più comune per verificare e vedere se un utente è attualmente loggato ... purché si imposti correttamente la variabile is_logged_in.

1

Quando si _construct il controller, è possibile trovare se sono connessi o meno dal get-go. Se non lo sono, inviarli alla schermata di login:

function __construct() { 
    parent::__construct(); 
    if (!$this->session->userdata('logged_in')) { 
      redirect('YourLoginController'); 
    } 
} 

Questo dovrebbe essere nel controller.

È anche possibile creare un controller di base per estendere il normale CI_Controller, cercare il concetto MY_Controller nei documenti. Lì, si potrebbe aggiungere un metodo che controlla per l'autenticazione e reindirizza in caso contrario, e quindi chiamare in vostri metodi del controller che richiedono l'autenticazione:

class MY_Controller extends Controller{ 
    public $data = array(); 
    function _construct() { 
     parent::_construct(); 
     $data['logged_in'] = $this->session->userdata('logged_in'); 
    } 

    function authenticated() { 
     if (!$this->data['logged_in']) { 
      redirect('YourLoginController'); 
     } 
    } 
} 

E poi nel controller:

class Some_Controller extends MY_Controller { 
    function _construct() { 
     parent::_construct(); 
    } 

    // If a method requires authentication 
    function someMethod() { 
     $this->authenticated(); //This does nothing if logged in 
           //It redirects to login if not logged in 
     //Your stuff. 
    } 

    //If a method DOESN'T require login, your $this->data to 
    //pass to the view has already been started from MY_Controller 
    //so append the display content you need to that array and 
    //then pass it to the view 
    function someOtherMethod() { 
     $this->data['somecontent'] = "I'm content"; 
     $this->load->view('someView',$this->data); 
    } 
} 

Utilizzando un concetto creato dallo someOtherMethod() è quindi possibile utilizzare la variabile $logged_in nella visualizzazione per modificare il contenuto in base allo stato di autenticazione di un utente.

2

Bene, la vista è per la logica di presentazione e in questo caso si dovrebbe mantenere il codice nel controller ma se si riferisce alla vista, ad esempio se si ha una navigazione e se si mostra un menu diverso per un loggato in utente quindi è possibile utilizzare il controller in

$loggedIn = $this->session->userdata('is_logged_in'); 
// .... 
$data['loggedIn'] = $loggedIn; 
$this->load->view('viewname', $data) 

e passare la variabile per la vista dal controller e poi nella vista è possibile controllare

<?php if($loggedIn): ?> 
    // Show menu for logged in user 
<?php else: ?> 
    // Show a different menu 
<?php endif; ?> 

Conservare soltanto alcuni loops come foreach a bu visualizzare un menu o compilare le dichiarazioni dropdown e.t.c e if (se necessario) nella vista.

0

Mentre il codice funziona sia nei file di visualizzazione e controller, è un'idea migliore mantenere il codice nel controller non solo per motivi di filosofia MVC, ma è anche più efficiente mantenerlo nel controller.

Il motivo è che i file di visualizzazione vengono caricati dai controller. Ciò significa che se un utente non ha effettuato l'accesso, i file di visualizzazione del controller & verranno comunque interpretati anche se non è necessario. Se si controlla la sessione nel controller, una volta che il controller apprende che la sessione è mancante, può interrompere l'interpretazione del resto del codice e fare qualche altra azione, come reindirizzare l'utente a pagine che non richiedono l'autenticazione.

Problemi correlati