[Codeigniter] Les sessions, un gros problème

Par Gofast77, il y a 10 ans


Bonjour,

Je suis entrain de réaliser un site avec Codeigniter. Jusqu'ici tout se passait bien mais j'ai un problème.

Mon problème est le suivant : je créer un site comportant 3 parties (public, privé, administration). Les 3 parties ont leurs propres URLs (public : mondomaine.fr ; privé : user.mondomaine.fr ; administration : admin.mondomaine.fr). Le controleur qui traite la connexion contient ceci :

<?php class Login extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('user_model'); } public function index() { $this->load->library('form_validation'); $this->form_validation->set_rules('callsign', 'Indicatif', 'trim|required'); $this->form_validation->set_rules('password', 'Mot de passe', 'trim|required|callback_check_database'); if($this->form_validation->run() == FALSE) { redirect(PUBLIC_URL, 'refresh'); }else{ redirect(PILOT_URL, 'refresh'); } } function check_database($password) { $callsign = $this->input->post('callsign'); $result = $this->user_model->login($callsign, $password); if($result) { $sess_array = array(); foreach($result as $row) { $sess_array = array('id' => $row->id, 'callsign' => $row->callsign, 'status' => 'logged_in' ); $this->session->set_userdata($sess_array); } return true; }else{ $this->form_validation->set_message('check_database', 'Invalid callsign or password'); return false; } } } ?>

Et tous mes controleurs ont une condition de type :

<?php if($this->session->userdata('status') == 'logged_in') { // Le controleur fait son boulot }else{ // Il redirige l'utilisateur vers la partie public ou privée en fonction d'où l'utilisateur veut forcer l'accès } ?>

Le problème c'est que j'ai une boucle de redirection qui est me bloque mais je ne voit pas ce qui ne va pas.

Autre chose : quand je debug la variable superglobale des sessions j'ai ceci :

Array ( [__ci_last_regenerate] => 1433496391 )

Merci d'avance :)

3 réponses

Alexandre #lbac, il y a 10 ans

Pourquoi tu traites ton résultat (dans check_database) avec un foreach ?

Normalement tu ne devrais pas avoir un tableau multidimensionnel.

Gofast77, il y a 10 ans

Enfaite le fait de mettre unboucle "for" à la place de la boucle "foreach" ne change rien au problème...

Alexandre #lbac, il y a 10 ans

C'est normal, tu ne dois pas faire de boucle du tout...

Que te retourne la fonction login de ton modèle User ?