7 votes

Les sessions PHP ne sont pas définies

J'ai un code qui se connecte via AJAX et transmet ensuite les données à un fichier .php pour les vérifier par rapport au SQL. Pour un test, le nom d'utilisateur et le mot de passe sont moi - moi ; cependant, même si ces données reviennent de la vérification, je ne suis pas connecté, il semble que la session ne soit pas définie.

log.php

<script type="text/javascript">
$(document).ready(function()
{
$("#login_form").submit(function()
{
    //remove all the class add the messagebox classes and start fading
                $("#msgbox").removeClass().addClass('messagebox').text('Validating....').fadeIn(1000);
    //check the username exists or not from ajax
    $.post("ejaxlog.php",{    username:$('#username').val(),password:$('#password').val(),rand:Math.random() } ,function(data)
    {
      if($.trim(data)=='yes') //if correct login detail
      {
        $("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
        { 
          //add message and change the class of the box and start fading
          $(this).html('Logging in.....').addClass('messageboxok').fadeTo(900,1,
          function()
          { 
             //redirect to secure page
             document.location='http://www.google.com';
          });

        });
      }
      else 
      {
        $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
        { 
          //add message and change the class of the box and start fading
          $(this).html('Your login detail   sucks...').addClass('messageboxerror').fadeTo(900,1);
        });     
      }

    });
    return false; //not to post the  form physically
});
//now call the ajax also focus move from 
$("#password").blur(function()
{
    $("#login_form").trigger('submit');
});
   });
  </script>

  <link type="text/css" href="formboxes.css" rel="stylesheet">

  </head>

  <body>
   <?
  echo $_SESSION['u_name'];?>
  <form method="post" action="" id="login_form">
 <div align="center">

 <div >
  User Name : <input name="username" type="text" id="username" value="" maxlength="20" />

 </div>
 <div style="margin-top:5px" >
  Password :
  &nbsp;&nbsp;
 <input name="password" type="password" id="password" value="" maxlength="20" />

 </div>
 <div class="buttondiv">
 <input name="Submit" type="submit" id="submit" value="Login" style="margin-left:-10px; height:23px"  /> <span id="msgbox" style="display:none"></span>

</div>

  </div>
</form>

Cela vérifie ensuite le MySQL via le code suivant, s'il réussit, il renvoie "yes" que je vois dans mes en-têtes HTTP (ce qui doit être correct) mais il ne me redirige pas vers "eindex.php" comme spécifié dans le fichier log.php.

 <?php
session_start();
require("../mcfrdb.php");
 // Included database once using the require method
?>

  <?php

$username = mysql_real_escape_string(stripslashes($_POST['username']));
$pass = mysql_real_escape_string(stripslashes($_POST['password'])); 

$result = mysql_query("SELECT user, pass FROM mcfruse WHERE user='$username'")or die(mysql_error());
$row=mysql_fetch_array($result); 

 if(mysql_num_rows($result)>0)
{

    if(strcmp($row['pass'],$pass)==0)
    {
            echo "yes";
            $_SESSION['name']=$username;
    }
    else
            echo "no";
}
else
    echo "no"; 

Mon HTML en utilisant firebug dit

oui

Donc, le "yes" est envoyé en écho, ce qui signifie qu'il passe le bon mot de passe et qu'il est validé, mais il y a toujours le message "Login detail sucks" et je ne suis pas redirigé vers eindex.php.

eindex.php

<?php
session_start();
if(!isset($_SESSION['name']))
header("Location:../index.php");
 //if logout then destroy the session and redirect the user
if(isset($_GET['logout']))
 {
 session_destroy();
 header("Location:../index.php");
 }

 require("../mcfrdb.php");
 ?>

J'ai vérifié le code plusieurs fois mais je n'ai rien trouvé. Toutes les réponses et toute aide sont appréciées. Merci beaucoup.

EDIT : même en ajoutant le hachage md5 pwd (omis dans ce code), j'obtiens toujours "yes" et lorsque je renvoie le nom d'utilisateur et le hachage, ils ne correspondent pas, la session n'est pas encore définie et ne me redirige pas. on if($.trim(data)=='yes')

7voto

watcher Points 10271

Toute page à laquelle vous accédez via AJAX est une demande séparée et vous devrez appeler session_start() pour que le super global de la session soit alimenté.

1voto

Timur Points 4135

Votre ejaxlog.php renvoie à yes ? Vous êtes sûr ? Essayez d'ajouter alert(data) o console.log(data) pour voir ce qu'il retourne. Il semble que votre script ne retourne pas yes ou pas seulement yes (peut-être, une erreur ?). Manifestement, vous n'êtes pas redirigé parce que votre JavaScript ne reçoit pas la chaîne appropriée, donc il ne vous redirige pas. Encore une fois, essayez de journaliser/alerter les données qui sont renvoyées par le script. Ou installez quelque chose comme FireBug pour FireFox pour voir toutes les requêtes effectuées par le JavaScript.

0voto

Ameer Points 745

Utiliser session_start() en haut de votre page ejaxlog.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X