web-dev-qa-db-fra.com

Les variables de session ne fonctionnent pas en php

Voici le code de ma page de connexion où le script de connexion vérifie l'authenticité de l'utilisateur, puis redirige vers la page de boîte de réception à l'aide de la fonction d'en-tête.

<?php
session_start();

include_once('config.php');
$user=htmlentities(stripslashes($_POST['username']));
$password=htmlentities(stripslashes($_POST['password']));
// Some query processing on database    

if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){
$_SESSION['loggedIn'] = 'yes';
    header("Location:http://xyz/inbox.php?u=$id_user_fetched");
    //echo 'Login Successful';
    }else{
        echo 'Invalid Login';
        echo'<br /> <a href="index.html">Click here to try again</a>';
        }
}else{
    echo mysqli_error("Login Credentials Incorrect!");
    }
?>

La page inbox.php ressemble à ceci:

<?php
session_start(); 
echo 'SESSION ='.$_SESSION['loggedIn'];
if($_SESSION['loggedIn'] != 'yes'){
echo $message = 'you must log in to see this page.';
//header('location:login.php');
}
 //REST OF THE CODE

?>

Maintenant, avec le code ci-dessus, inbox.php affiche toujours le résultat: SESSION = vous devez vous connecter pour voir cette page ..____, ce qui signifie que la variable de session n'est pas en cours d'installation ou que le projet inbox.php ne parvient pas à récupérer la variable de session. Où vais-je mal?

10
Arihant
  1. Assurez-vous que session_start(); est appelé avant toute session. Donc, une valeur sûre serait de le mettre au début de votre page, immédiatement après la balise d'ouverture <?php avant toute chose Assurez-vous également qu'il n'y a pas d'espaces ni de tabulations avant la balise d'ouverture <?php.
  2. Après la redirection header, terminez le script actuel en utilisant exit(); (D'autres personnes ont également suggéré session_write_close(); et session_regenerate_id(true), vous pouvez également les essayer, mais j'utiliserais exit();).
  3. Assurez-vous que les cookies sont activés dans le navigateur que vous utilisez pour le tester.
  4. Assurez-vous que register_globals est désactivé, vous pouvez le vérifier dans le fichier php.ini et également à l'aide de phpinfo(). Reportez-vous à this pour savoir comment l’éteindre.
  5. Assurez-vous de ne pas supprimer ou vider la session.
  6. Assurez-vous que la clé de votre tableau $_SESSION superglobal n’est écrasée nulle part.
  7. Assurez-vous de rediriger vers le même domaine. Donc, la redirection d'un www.yourdomain.com vers yourdomain.com ne reporte pas la session.
  8. Assurez-vous que votre extension de fichier est .php (ça arrive!).

PHP session perdue après la redirection

25
revo

J'ai eu le même problème pendant un moment et j'ai eu beaucoup de difficulté à le comprendre. Mon problème était que le site fonctionnait pendant un certain temps avec les sessions qui fonctionnaient correctement, puis tout a soudainement éclaté.

Apparemment, votre session_save_path (), pour moi c’est/var/lib/php5 /, doit disposer des autorisations appropriées (l’utilisateur exécutant php, par exemple, www-data doit avoir un accès en écriture au répertoire). Je l'ai accidentellement changé, interrompant complètement les sessions.

Exécutez Sudo chmod -R 700 /var/lib/php5/ puis Sudo chown -R www-data /var/lib/php5/ pour que l'utilisateur php ait accès au dossier.

8
Vadman

Peut-être que si votre chemin de session ne fonctionne pas correctement, vous pouvez essayer la fonction session.save_path(path/to/any folder); comme chemin alternatif. Si cela fonctionne, vous pouvez demander à votre fournisseur d'hébergement le problème du chemin par défaut.

3
Ashraf Ali

Si vous utilisez un script de connexion, n'oubliez pas d'utiliser également session_start(); lors de la connexion, rencontrez des problèmes avant de remarquer ce problème.

2

Je viens de parler au service d'hébergement, c'était un problème à leur fin. il a dit "votre compte session.save_path n'a pas été défini car un problème est survenu. Je l'ai configuré pour vous maintenant."

Et ça marche bien après ça :)

1
Arihant

L'autre raison importante pour laquelle les sessions ne peuvent pas fonctionner est de jouer avec les paramètres de cookie de session, par exemple. la définition de la durée de vie du cookie de session sur 0 ou d'autres valeurs faibles en raison d'une simple erreur ou d'un autre développeur pour une raison quelconque. 

session_set_cookie_params(0)
1

J'ai eu un problème similaire et avec le domaine de cookie:

    ini_set('session.cookie_domain', '.domain.com');

le domaine a été mal configuré, donc toutes les sessions ont été ignorées car le cookie de l'utilisateur n'a jamais été correctement configuré. J'espère que cela aidera quelqu'un.

0
talsibony

J'étais également confronté au même problème que j'ai fait les étapes suivantes pour résoudre le problème

  1. J'ai édité le fichier /etc/php.ini et recherché le chemin session.save_path = "/ var/lib/php/session", vous devez donner les informations à votre session

2 Après cela, vous venez de modifier l’autorisation donnée sous * chown root.Apache/var/lib/php/session * Ces étapes ci-dessus résolvent mon problème

0
Aman Shukla

J'ai rencontré ce problème aujourd'hui. le problème a à voir avec la $ config ['base_url']. J'ai remarqué que htpp: //www.domain.com et http://example.com était le problème. pour résoudre ce problème, définissez toujours votre base_url sur http://www.example.com

0
Devqxz