web-dev-qa-db-fra.com

La session Codeigniter ne fonctionne pas sur PHP 7

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

9
hrishi

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.

28
Shafiq

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.

9
PHP Worm...

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

6
Siddhesh

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

5
Leon Lo

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');
}
3
Mr. ED

Je propose les étapes suivantes:

  1. Allez sur https://www.codeigniter.com , téléchargez la dernière version 3.x.x du framework et décompressez-la.
  2. Faites une copie du dossier système dans l'application existante, enregistrez-le ailleurs, puis supprimez celui dans votre dossier d'application.
  3. Prenez une copie du dossier système que vous venez de télécharger et placez-le où vous avez supprimé le dernier.
  4. Terminer!

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.

3
pimpace

Mettez à niveau Codeigniter vers la dernière version. Le problème sera résolu.

2
Anmol Mourya

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.

1
Sunday Okoi