2013-05-17 36 views
5

Was ist die sicherste Art zu überprüfen, ob ein Benutzer angemeldet ist? Ich benutze PHP Framework, Codeigniter.Überprüfen, ob sich ein Benutzer angemeldet hat

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

Ist es wichtig, ob dieser Code in der Steuerung oder in einer Ansicht ist?

Antwort

0

Der Code ist besser in einem Controller platziert, sodass Sie die richtige Ansicht zeigen können, je nachdem, ob der Benutzer angemeldet ist oder nicht. Sichern? Was willst du vermeiden? Mit CI ist dies die gebräuchlichste Art zu überprüfen und zu sehen, ob ein Benutzer gerade angemeldet ist ... solange Sie die is_logged_in Variable richtig einstellen.

1

Wenn Sie _construct der Controller, können Sie feststellen, ob sie eingeloggt sind oder nicht von Anfang an. Wenn dies nicht der Fall ist, senden Sie sie zum Anmeldebildschirm:

Dies sollte definitiv in der Steuerung sein.

Sie könnten auch einen Basiscontroller erstellen, um Ihre regulären CI_Controller zu erweitern, suchen Sie das MY_Controller Konzept in der Dokumentation. Dort könnten Sie eine Methode hinzufügen, die für die Authentifizierung überprüft und leitet, wenn nicht, und es dann in Ihrem Controller-Methoden aufrufen, die eine Authentifizierung erfordern:

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

Und dann in Ihrem 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); 
    } 
} 

Verwendung ein Konzept erstellt von der someOtherMethod() Sie könnten dann die Variable $logged_in aus Ihrer Sicht verwenden, um den Inhalt basierend auf einem Benutzer Authentifizierungsstatus zu ändern.

2

Nun, die Ansicht ist für die Präsentationslogik und in diesem Fall sollten Sie den Code in der Steuerung behalten, aber wenn es mit der Ansicht, zum Beispiel, wenn Sie eine Navigation haben und wenn Sie ein anderes Menü für eine geloggt anzeigen in Benutzer, dann können Sie in Ihrem Controller kann

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

und übergeben Sie die Variable in der Ansicht von der Steuerung und dann in der Sie überprüfen Ansicht verwenden

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

Halten Sie etwas loops wie foreach nur bu Erstellen Sie ein Menü oder füllen Sie eine dropdown e.t.c und if Anweisungen (falls erforderlich) in der Ansicht.

0

Während der Code sowohl in View- als auch in Controller-Dateien funktioniert, ist es besser, den Code im Controller nicht nur für die MVC-Philosophie zu behalten, sondern auch effizienter im Controller zu halten.

Der Grund ist, dass Ihre Ansichtsdateien von Controllern geladen werden. Dies bedeutet, dass, wenn ein Benutzer nicht angemeldet ist, Ihr Controller & View-Dateien weiterhin interpretiert werden, obwohl sie nicht sein müssen. Wenn Sie die Sitzung im Controller überprüfen, nachdem der Controller festgestellt hat, dass die Sitzung fehlt, kann er den restlichen Code nicht mehr interpretieren und andere Aktionen ausführen, z. B. die Umleitung des Benutzers auf Seiten, für die keine Authentifizierung erforderlich ist.

Verwandte Themen