J'utilise codeigniter version 3.0.6 on PHP 5.6 et cela fonctionne très bien. mais quand je lance le même projet sur PHP 7.1, la session codeigniter ne fonctionne pas. Je règle la session comme ci-dessous
$login_session = $this->session->set_userdata("user_session",$session_data);
quand j'imprime $ login_session il est vide sur PHP 7
Récemment, j'ai rencontré le même problème en mettant à niveau ma version php de 5.6 à 7.1 Mon environnement de développement est XAMPP (Apache + MariaDB) en utilisant php7.1.4
Veuillez suivre les étapes ci-dessous:
1) Allez dans système/bibliothèques/Session/Session.php
2) Commentez session_start () en ajoutant //.
3) Descendez à la ligne 312-315 où il est dit que la sécurité est reine et commentez les lignes suivantes:
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
4) Ensuite, allez dans votre index.php principal (l'index racine.php)
5) Ajoutez une fois session_start () en haut.
Ça marche pour moi.
J'ai réussi à surmonter cela en suivant ces étapes.
1) Accédez à system/libraries/Session/Session.php
2) Recherchez session_start()
Commentez session_start()
en ajoutant //.
3) Descendez à la ligne vers 312 (ou recherchez Security is king
) Et commentez tout ini_set()
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
4) Ensuite, allez dans votre index.php principal (l'index racine.php)
5) Ajoutez session_start()
en haut.
6) Sous session_start()
ajoutez les lignes suivantes commentées dans Session.php
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
C'est ça.
J'ai trouvé que le problème venait d'une version antérieure de Codeigniter 3 et il s'agit d'un bug déjà signalé sur leur site Web. Le bug a été corrigé et dans la dernière version de Codeigniter 3, ce problème ne se produit pas.
Si vous êtes déjà dans une version défectueuse, cogeinter envisagez de remplacer le dossier système par celui de la dernière version.
Trouvé cette réponse ici
L'identifiant de session est différent dans php 7.1 et ne passe pas la vérification des expressions régulières.
Une solution simple: dans le système/bibliothèques/Session/Session.php autour de la ligne 133
OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
supprimer '{40} $'
OR ! preg_match('/^[0-9a-f]/', $_COOKIE[$this->_config['cookie_name']])
Le problème est que l'ID de session est supprimé du cookie en raison de la disparité des expressions rationnelles. Ainsi, l'ID de session est toujours renouvelé.
Cela peut corriger l'expression régulière et l'empêcher d'exécuter la ligne "unset ($ _ COOKIE [$ this -> _ config ['cookie_name']]]);"
Cela fonctionne totalement pour moi!
Pour info. Trouvez cela après l'avoir réparé moi-même. https://github.com/bcit-ci/CodeIgniter/issues/48
Assurez-vous d'avoir défini le chemin d'enregistrement de la session
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = APPPATH . 'cache/session/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
Définissez l'autorisation de dossier 0700
Session de chargement automatique si vous le souhaitez
$autoload['libraries'] = array('session');
Comment configurer la session
$session = array('islogged' => true, 'user_id' => '1');
$this->session->set_userdata($session);
Obtenez les données utilisateur un ensemble d'exemples
echo $this->session->userdata('user_id');
if (!$this->session->userdata('islogged')) {
redirect('logout');
}
Je propose les étapes suivantes:
Cela résout le problème de manière transparente, cela vous fait gagner du temps ainsi que le risque potentiel de gâcher votre application.
Mettez à niveau Codeigniter vers la dernière version. Le problème sera résolu.
Le problème vient de votre version PHP, PHP 7.1 n'est pas vraiment stable et a beaucoup de problèmes avec les sessions. Changez votre PHP version à 7.0 et les sessions commenceront automatiquement à fonctionner.