Session perdue après une redirection dans Codeigniter

j'utilise codeigniter comme cadre.

tout d'Abord, j'utilise localhost mais lorsque je change d'adresse IP, la fonction login ne fonctionne plus. J'ai trouvé que la session est perdue après une 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 voir il n'a pas toutes les données transmises à user_data mais il a été mis en avant de rediriger quand je test.

je sépare le controller en deux dont le premier est users -> handler de la fonction de connexion et un autre est planificateur qui handler du lien que je redirige du contrôleur des utilisateurs.

users.php (le 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;
17
demandé sur Muhammad Raheel 2012-08-22 11:07:52

11 réponses

tout d'Abord, vous devez vous assurer qu'il n'y a pas de caractères spéciaux dans la session éléments comme '\n' ou '\v'. Ces caractères peuvent amener votre chaîne à se casser 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 déchiffrez-le lorsque vous avez besoin de l'utiliser.

2
répondu user1685398 2012-09-21 01:49:05

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

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

j'ai d'abord eu cette variable définie à un nom de domaine pleinement qualifié tel que www.exampledomain.com mais pendant ce temps, j'utilisais un serveur local.

le domaine dans lequel votre script s'exécute doit être le même que le domaine défini sous $config['cookie_domain] pour éviter un échec inattendu avec la classe de session codeigniter.

1
répondu katwekibs 2015-02-16 13:49:17

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

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

exemple, avant était

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

après est devenu

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

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

1
répondu Dmitriy 2016-05-04 19:46:50

dans mon cas, après quelques tests (avec https et http dans localhost) l'erreur vient pour ce problème et ne pas avoir correctement défini le $config['cookie_secure'], donc vous pouvez essayer de changer dans config.php:

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

Cheers!

0
répondu elverde 2014-07-21 09:10:59

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

  1. un (ou plusieurs) de vos fichiers n'est pas 'UTF-8 avec BOM' (si votre site web ne sera pas seulement anglais et utiliser UTF-8 comme encodage comme le mien). Vous devez changer tous les fichiers en 'UTF-8 avec BOM'. Notepad++ vous aidera.
  2. il y a des caractères avant ou après la balise php ?> (mieux ?> hors.) S'il vous plaît assurez-vous qu'il n'y a aucun caractère inclure l'espace.
  3. lorsque vous appelez localhost / xxxxxx comme adresse, changez-la en 127.0.0.1 / xxxxxx ou votre adresse IP LAN
  4. je stocke toujours les sessions dans DB au lieu du fichier (plus facile à déboguer).
0
répondu mohonid1 2015-04-25 20:17:40

Même problème avec moi.

Veuillez vérifier avez-vous chargement d'une session de la bibliothèque dans le contrôleur.

$this->load->library('session');
0
répondu bkac 2016-08-08 11:25:28

veuillez vérifier vos liens et assurez-vous qu'ils sont écrits correctement. Lorsque vous écrivez des URLs absolues, assurez-vous d'ajouter la partie 'www'. C'était le problème dans mon cas. J'espère que cela aide quelqu'un.


bon: en-tête ("Location:http://www.yourdomain.com/controller/page");


mauvais (interrompt votre session): en-tête ("Location:http://yourdomain.com/controller/page");

0
répondu Amin Balogun 2017-03-25 13:11:06

Vous devriez ajouter une chose à votre autoload.php fichier.

$autoload['libraries'] = array('database','session');

cela permettra de résoudre votre session de re-direction de problème

0
répondu shuvro 2017-08-29 17:58:03

c'est trop tard mais j'ai fait face au même problème heureusement Je résous ce problème en changeant un peu les configurations comme 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 vous conviendra aussi.

0
répondu Syed Arif Iqbal 2018-06-20 14:01:13

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 est de simplement encoder les données en utilisant le code base64_encode.

par exemple:

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

Et pour le réutiliser, il suffit de faire ceci:

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

J'espère que cela vous aidera.

NEW FINDING: Ce problème persiste sur les navigateurs et les périphériques. Ce n'est donc plus vraiment une solution. Pour exemple, il fonctionne sur Samsung Android, MicroMAX Android mais pas sur Huawei Android.

0
répondu itsols 2018-08-19 06:31:35

Session perdue après redirection dans Codeigniter

j'ai trouvé le problème.

vous rencontrez toujours le problème. S'il vous plaît noter la direction de la session du codeigniter. Lorsque votre navigateur a visité votre site web et se rafraîchir un peu, le codeigniter a généré plus de fichiers de session sous la direction de la session du codeigniter.

vous chargez la session de la bibliothèque sur votre fichier contrôleur.

veuillez vous référer à la configuration suivante.php paramètre.

enter image description here

lorsque vous changez le paramètre about, veuillez supprimer ou effacer toutes les données hors ligne de votre navigateur et toutes les sessions du fichier codeigniter. Ensuite, vous essayez de le faire à nouveau. C'est peut-être à réparer le problème.

si vous ne pouvez toujours pas réparer le problème. Vous pouvez télécharger le paquet codeigniter à partir de codeigniter.org puis extraire le paquet pour l'environnement de test.

-1
répondu Everst 2017-06-16 09:06:32