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 :
<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')