SOLUTION : Après de nombreuses heures de recherche, il semble que ce problème se produisait lorsque j'accédais à mon site web sans ajouter le "www." avant le domaine. Donc ce qui se passait réellement, c'est que je me connectais avec example.com/login.php qui établit une session quelque part, que mon contrôle des membres ne reconnaît pas, donc il me redirige vers www.example.com/login.php, que lorsque je me connecte tout fonctionne Ok.
Lorsque je me connecte à partir de www.example.com/login.php (avec le www.), il se connecte correctement dès la première tentative.
J'ai donc ajouté un code pour m'assurer que j'ai toujours le www dans l'URL :
if ($_SERVER['HTTP_HOST'] == "example.com")
{
$url = "http://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: $url");
}
et tout fonctionne bien maintenant. J'espère que cela aidera quelqu'un.
Donc, j'ai construit plus de 3 sites Web, et tous ont le même problème, je ne sais pas pourquoi, je dois me connecter deux fois jusqu'à ce que je sois vraiment connecté... (jusqu'à ce que les variables de session soient définies). L'aide est vraiment appréciée, j'essaie de résoudre ce problème et je cherche une solution depuis longtemps...
session_start();
if ((isset($_SESSION['UserName']))&&(isset($_SESSION['LastActivity'])))
{
header ('Location: http://www.example.com/Account.php');
}
if (isset($_POST['username']))
{
mysql_connect("localhost","DBuser","pass") or
die ("could not connect to mysql");
mysql_select_db("DBNAME") or die ("no database");
$inputUserName = $_POST['username'];
$inputPass = $_POST['password'];
$datausername = mysql_real_escape_string($inputUserName);
$password=md5($inputPass);
$sqlCommand = "SELECT * FROM Members
WHERE UserName='$datausername' AND
Password='$password'";
$result = mysql_query($sqlCommand);
if (mysql_num_rows($result) > 0)
{
$_SESSION['UserName'] = $datausername;
$_SESSION['LastActivity']= time();
sleep(2);
$LoginDate = date('Y-m-d H:i:s');
mysql_connect("localhost","DBUPDATEusername","DBuserPass") or
die ("could not connect to mysql");
mysql_select_db("databaseName") or die ("no database");
mysql_query("Update Members SET LastLogin='$LoginDate' WHERE
UserName='$datausername'");
mysql_close();
echo '<meta http-equiv="Refresh" content="0;url=http://www.example.com/Account.php?p=Login_Success"/>';
}
else {
mysql_close();
echo '<div id="error_msg">Error: Information entered are not correct. Please check and try again.</div>';}
}
}
?>
<form...
formulaire de connexion (avec action=""), et méthode post).
Note : J'utilise la balise html refresh, parce que je ne peux pas utiliser la redirection de l'en-tête (j'obtiens l'erreur que l'en-tête est déjà envoyé).
et dans le fichier example.com/Account.php je fais cette vérification en haut du code :
session_start();
if ((!isset($_SESSION['UserName']))||(!isset($_SESSION['LastActivity'])))
{
header('Location: http://www.example.com/?p=Must_Login');
}
Et il semble que la première fois que je me connecte et suis redirigé vers le panneau account.php.. les valeurs de session ne sont pas définies, et me redirige vers la page Must_Login. Je me connecte à nouveau (même page de connexion que la première fois). Mais la deuxième fois que je me connecte, les valeurs de session sont définies et tout est OK.
Merci beaucoup d'avance pour votre aide !