Ich habe diese private Sitzung in einem meiner Controller, die prüft, ob ein Benutzer angemeldet ist:
function _is_logged_in() {
$user = $this->session->userdata('user_data');
if (!isset($user)) {
return false;
}
else {
return true;
}
}
Das Problem ist, dass ich mehr als einen Controller habe. Wie kann ich diese Funktion in diesen anderen Steuerungen verwenden? Die Neudefinition der Funktion in jedem Controller ist nicht sehr "TROCKEN".
Irgendwelche Ideen?
Eine weitere Option ist das Erstellen eines Basiscontrollers. Platzieren Sie die Funktion im Basiscontroller und erben Sie davon.
Um dies in CodeIgniter zu erreichen, erstellen Sie eine Datei mit dem Namen MY_Controller.php im Bibliotheksordner Ihrer Anwendung.
class MY_Controller extends Controller
{
public function __construct()
{
parent::__construct();
}
public function is_logged_in()
{
$user = $this->session->userdata('user_data');
return isset($user);
}
}
Lassen Sie dann Ihren Controller von diesem Basiscontroller erben.
class X extends MY_Controller
{
public function __construct()
{
parent::__construct();
}
public function do_something()
{
if ($this->is_logged_in())
{
// User is logged in. Do something.
}
}
}
Legen Sie es in einen Helfer und laden Sie es automatisch.
helpers/login_helper.php:
function is_logged_in() {
// Get current CodeIgniter instance
$CI =& get_instance();
// We need to use $CI->session instead of $this->session
$user = $CI->session->userdata('user_data');
if (!isset($user)) { return false; } else { return true; }
}
config/autoload.php:
$autoload['helper'] = array('login');
Dann können Sie in Ihrem Controller Folgendes anrufen:
is_logged_in();
Dies erreichen Sie mit helper und CodeIgniter-Konstruktor.
Sie können den benutzerdefinierten Helfer my_helper.php erstellen, in dem Sie Ihre Funktion schreiben
function is_logged_in() {
$user = $this->session->userdata('user_data');
if (!isset($user)) {
return false;
}
else {
return true;
}
}
Im Controller, wenn seine login.php
class Login extends CI_Controller {
public function __construct()
{
parent::__construct();
if(!is_logged_in()) // if you add in constructor no need write each function in above controller.
{
//redirect you login view
}
}
Holen Sie sich alle Benutzerdaten aus der Sitzung.
Im Controller
$userData = $this->session->all_userdata();
In der View,
print_r($userData);
Ich denke, das Verwenden von Haken ist ziemlich einfach. Erstellen Sie einfach einen Hook, um $this->session->user
zu überprüfen. Es wird in jeder Anfrage aufgerufen.
Fügen Sie dies einfach in Ihre Ordner-Kerndatei ci_controller unter function __construct () ein, um alle Controller () zu überprüfen:
function __construct()
{
parent::__construct();
if(! $user = $this->session->userdata('user_data');)
{
return false;
}
}
Ich habe wie oben beschrieben codiert .. Und das läuft für mich Erzeuge Datei my_helper.php
<?php
function _is_logged_in() {
if(isset($_SESSION['username'])){
return true;
} else {
return false;
}
}
?>
Bearbeiten Sie die Datei autoload.php
$autoload['helper'] = array('my');
In Ihrer Controller-Datei
class Welcome extends CI_Controller {
public function __construct(){
parent::__construct();
if(!_is_logged_in())
{
redirect("Login");
}
}
}