web-dev-qa-db-fra.com

Session perdue après la redirection dans Codeigniter

J'utilise codeigniter comme cadre.

Tout d'abord, j'utilise localhost, mais lorsque je change d'adresse IP, la fonction de connexion ne fonctionne plus. J'ai trouvé que la session est perdue après la redirection vers un autre contrôleur.

Voici le résultat de print_r($this->session->all_userdata());

[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2 
[ip_address] => 10.42.68.71 
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
[last_activity] => 1285962398 
[user_data] =>

Comme vous pouvez le constater, aucune donnée n’a été transmise à user_data, mais elle a été définie avant la redirection lors du test.

Je sépare le contrôleur en deux dont le premier est des utilisateurs -> gestionnaire de la fonction de connexion et un autre est planificateur quel gestionnaire du lien que je redirige à partir du contrôleur des utilisateurs.

users.php (premier contrôleur):

$this->load->model('users_model');
$this->load->model('mymodel');
$this->load->database();

$email = $this->input->post('email');

$pass = $this->input->post('password');

$type = $this->input->post('type');

// Authenticate the user
$userdata = $this->users_model->auth_user($email,$pass,$type);

if($userdata)
{
    $data = array('FIRSTNAME' => $userdata->FIRSTNAME, 
                  'LASTNAME' => $userdata->LASTNAME, 
                  'EMAIL' => $userdata->EMAIL,
                  'LOGIN' =>TRUE, 'TYPE' => $type);
    $this->session->set_userdata($data);
    redirect('planner/view_system','refresh');
}

planner.php (deuxième contrôleur):

function __construct() {
    parent::__construct();

    if ( ! ($this->session->userdata('LOGIN')))
    { 
        print_r (var_dump($this->session->userdata('FIRSTNAME')));
        print_r($this->session->all_userdata());
    }
    $this->load->helper(array('form','html','url'));

Et voici ma config

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;
18
Zatanna

Tout d'abord, vous devez vous assurer qu'il n'y a pas de caractères spéciaux dans les éléments de session tels que '\ n' ou '\ v'. Ces caractères peuvent amener votre chaîne à se rompre au milieu. Essayez trim () pour obtenir de l'aide.

Si cela ne sert à rien, c'est peut-être un problème d'encodage. Essayez de chiffrer l'élément de session avant de le définir et de le déchiffrer lorsque vous en avez besoin.

2
user1685398

J'ai résolu ce problème en configurant le $ config ['cookie_domain'] sur localhost

$config['cookie_domain']    = "localhost";

j'avais initialement cette variable définie sur un nom de domaine pleinement qualifié tel que www.exampledomain.com mais, entre-temps, j'utilisais un serveur local. 

Le domaine dans lequel votre script est exécuté doit être identique à celui défini sous $ config ['cookie_domain] pour éviter tout échec imprévu avec la classe de session codeigniter.

1
katwekibs

J'ai un problème similaire, et il s'est avéré que ce problème est très banal ...

la racine du mal de mes problèmes étaient les noms contenant le caractère "_"

par exemple, avant était 

$this->session->set_flashdata('message_success', 'some message');

après être devenu

$this->session->set_flashdata('messagesuccess', 'some message');

Mon problème est résolu Merci mec avec cette ressource http://biostall.com/losing-codeigniter-sessions/

1
Dmitriy

S'il vous plaît vérifier vos liens et assurez-vous qu'ils sont écrits correctement. Lorsque vous écrivez des URL absolues, veillez à ajouter la partie "www". C'était le problème dans mon cas. J'espère que ça aidera quelqu'un.


Bien: en-tête ("Emplacement: http://www.votredomaine.com/controller/page ");


Mauvais (casse votre session): en-tête ("Emplacement: http://votredomaine.com/controller/page ");

0
Amin Balogun

D'après mon expérience, les problèmes peuvent être:

  1. un (ou plusieurs) de vos fichiers n'est pas 'UTF-8 with BOM' (si votre site Web ne sera pas uniquement anglais et utilisera UTF-8 comme encodage comme le mien). Vous devez modifier tous les fichiers en «UTF-8 avec nomenclature». Notepad ++ aidera.
  2. il y a des caractères avant ou après la balise php?> (mieux vaut prendre?> out). Veuillez vous assurer qu'il n'y a pas de caractères incluant un espace.
  3. Lorsque vous appelez localhost/xxxxxx en tant qu’adresse, remplacez-la par 127.0.0.1/xxxxxx ou votre adresse IP de réseau local.
  4. Je stocke toujours les sessions dans la base de données au lieu du fichier (plus facile pour le débogage).
0
mohonid1

J'ai été choqué au début quand j'ai rencontré ce problème. Cela m'est arrivé parce que mes données de session avaient un signe @.

La solution consiste simplement à encoder les données à l'aide de base64_encode.

Par exemple: 

$Data = urlencode(  base64_encode($Email) );
$this->session->set_userdata('Data', $Data);

Et pour le réutiliser, faites simplement ceci:

$Data = base64_decode( urldecode( $this->session->userdata('Data') ) );

J'espère que cela t'aides.

NOUVELLE RECHERCHE: Ce problème persiste toujours sur certains navigateurs et périphériques. Donc, ce n'est plus vraiment une solution. Par exemple, cela fonctionne sur Samsung Android, MicroMAX Android mais pas sur Huawei Android.

0
itsols

Il est trop tard, mais heureusement, j’ai fait face au même problème, mais j’ai résolu ce problème en modifiant un peu les configurations décrites ci-dessous.

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE; // change this
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE; // change this
$config['sess_match_useragent'] = TRUE; // change this
$config['sess_time_to_update']  = 300;

J'espère que cela fonctionnera pour vous aussi.

0
Syed Arif Iqbal

Dans mon cas, après quelques tests (avec https et http dans localhost), l'erreur survient, faute d'avoir défini correctement $ config ['cookie_secure'], vous pouvez donc essayer de le modifier dans config.php:

$config['cookie_secure']    = FALSE; // if is not under https, or true if you use https

À votre santé!

0
elverde

Même problème avec moi.

Veuillez vérifier que vous avez chargé la bibliothèque de sessions dans le contrôleur.

$this->load->library('session');
0
bkac