Boas pessoal!
Já há algum tempo que não vinha aqui![:)]()
Estou com um problema que não sei bem como resolver por isso vinha pedir aqui ajuda!
Tinha os ficheiros instalados e configurados aqui no WAMP e o login funciona 5*, mas quando meti pelo FTP no servidor algo não funciona :S (é a única coisa so far que não funciona).
Tenho aqui o código de um login simples que fiz para testes e num funciona e no server não funciona..
Login.php
Código :
login2.php
Código :
função login:
Código :
função login_check:
Código :
forms.js:
Código :
o sha512 está neste site (muito grande, ajuda na password): http://pajhome.org.uk/crypt/md5/sha512.html
Quando faço login no localhost fiz um echo para ver o que gera e mete isto:
a917d01789b58dfd3a702c715496269886f5d363d7445f42ee7b963e9de2a1da7dfbf0b88248ca648e69927353c0a76aaccd1d9b2ef1e32a7fe18ca3710f8929
Logado
e no servidor mesmo falhando aparece isto:
a917d01789b58dfd3a702c715496269886f5d363d7445f42ee7b963e9de2a1da7dfbf0b88248ca648e69927353c0a76aaccd1d9b2ef1e32a7fe18ca3710f8929
falhou
(é o mesmo)
O que se passará para dar no localhost e não no servidor??? Será que não está a comparar bem a password da base de dados com a password da form? Estive à procura o dia todo e não consigo saber mesmo porque não funciona mas sou noob nisto :/
Cumps
Já há algum tempo que não vinha aqui

Estou com um problema que não sei bem como resolver por isso vinha pedir aqui ajuda!
Tinha os ficheiros instalados e configurados aqui no WAMP e o login funciona 5*, mas quando meti pelo FTP no servidor algo não funciona :S (é a única coisa so far que não funciona).
Tenho aqui o código de um login simples que fiz para testes e num funciona e no server não funciona..
Login.php
Código :
<html><head>
<title>ola</title>
<script type="text/javascript" src="javascripts/sha512.js"></script>
<script type="text/javascript" src="javascripts/form.js"></script>
</head>
<body>
<?php
include 'includes/db_connect.php';
include 'includes/functions.php';
sec_session_start();
?>
<form method="post" name="login" action="login2.php">
<input id="usr" name="utilizador" type="text" class="TextBoxLogin" />
<input type="password" id="password" name="password" class="TextBoxPassword" />
<input type="hidden" name="p" id="p" value="" />
<input type="submit" value="ENTRAR" class="BotaoEntrar" id="BotaoEntrar" onclick="formhash(this.form, this.form.password);"/>
</form>
</body>
</html>
<title>ola</title>
<script type="text/javascript" src="javascripts/sha512.js"></script>
<script type="text/javascript" src="javascripts/form.js"></script>
</head>
<body>
<?php
include 'includes/db_connect.php';
include 'includes/functions.php';
sec_session_start();
?>
<form method="post" name="login" action="login2.php">
<input id="usr" name="utilizador" type="text" class="TextBoxLogin" />
<input type="password" id="password" name="password" class="TextBoxPassword" />
<input type="hidden" name="p" id="p" value="" />
<input type="submit" value="ENTRAR" class="BotaoEntrar" id="BotaoEntrar" onclick="formhash(this.form, this.form.password);"/>
</form>
</body>
</html>
login2.php
Código :
<?php include 'includes/db_connect.php';
include 'includes/functions.php';
sec_session_start(); // Our custom secure way of starting a php session.
if (isset($_POST['utilizador'], $_POST['p'])) {
$utilizador = $_POST['utilizador'];
$password = $_POST['p']; // The hashed password.
echo $password;
echo"<br />";
if (login($utilizador, $password, $mysqli) == true) {
echo"Logado <br />";
} else {
// Login failed
echo "falhou! <br />";
}
} else {
// The correct POST variables were not sent to this page.
echo 'Pedido inválido. Alguma coisa correu mal.';
}
?>
include 'includes/functions.php';
sec_session_start(); // Our custom secure way of starting a php session.
if (isset($_POST['utilizador'], $_POST['p'])) {
$utilizador = $_POST['utilizador'];
$password = $_POST['p']; // The hashed password.
echo $password;
echo"<br />";
if (login($utilizador, $password, $mysqli) == true) {
echo"Logado <br />";
} else {
// Login failed
echo "falhou! <br />";
}
} else {
// The correct POST variables were not sent to this page.
echo 'Pedido inválido. Alguma coisa correu mal.';
}
?>
função login:
Código :
function login($utilizador, $password, $mysqli) { // Using prepared Statements means that SQL injection is not possible.
if ($stmt = $mysqli-> prepare("SELECT idUtilizador, utilizador, password, salt, perfilUtilizador, bloqueado, ultimo_Login, n_Tentativas FROM utilizador WHERE utilizador = ? LIMIT 1")) {
$stmt-> bind_param('s', $utilizador); // Liga "$utilizador" ao parametro.
$stmt-> execute(); // Executa a consulta preparada.
$stmt-> store_result(); // Armazena os resultados.
$stmt-> bind_result( $idUtilizador, $utilizador, $db_password, $salt, $perfilUtilizador, $bloqueado, $ultimo_Login, $n_Tentativas); // Obtem variaveis dos resultados.
$stmt-> fetch(); // Vai buscar os valores.
$password = hash('sha512', $password.$salt); // Verifica o hash de "$password" e "$salt.
$dataeHora = date("Y-m-d H:i:s");
if ($stmt-> num_rows == 1) { // Se o utilizador existir.
if ($bloqueado == 0) { // Verifica se a conta está bloqueada.
if ($db_password == $password) { // Verifica se a password da base de dados corresponde a password submetida pelo utilizador.
// Password esta correta.
$user_browser = $_SERVER['HTTP_USER_AGENT']; // Get the user-agent string of the user.
$idUtilizador = preg_replace("/[^0-9]+/", "", $idUtilizador); // Proteccao contra XSS para depois poder usar o print ou echo deste valor.
$_SESSION['idUtilizador'] = $idUtilizador;
$ip_track = $_SERVER['REMOTE_ADDR'];
$_SESSION['ip_track'] = $ip_track;
$utilizador = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $utilizador); // Proteccao contra XSS para depois poder usar o print ou echo deste valor.
$_SESSION['utilizador'] = $utilizador;
$perfilUtilizador = preg_replace("/[^0-9]+/", "", $perfilUtilizador); // Proteccao contra XSS para depois poder usar o print ou echo deste valor.
$_SESSION['perfilUtilizador'] = $perfilUtilizador;
$_SESSION['login_string'] = hash('sha512', $password.$user_browser);
return true; // Login correto.
} else {
if ($n_Tentativas >= 5) { // Verifica o numero de tentativas. Se o numero for maior ou igual a 5,a conta fica bloqueada.
$stmt = $mysqli->prepare("UPDATE utilizador SET bloqueado = '1' WHERE utilizador = ? LIMIT 1"); // Conta fica bloqueada.
$stmt-> bind_param('s', $utilizador);
$stmt->execute();
return false;
} else {
if($dataeHora > $ultimo_Login) { // Se a Data Atual for maior que a data do ultimo login falhado.
$dataeHora = date("Y-m-d H:i:s"); // Data atual
$now = time(); // Time atual.
$ip_track = $_SERVER['REMOTE_ADDR'];
$mysqli-> query("INSERT INTO tentativas_login (idUtilizador, time, dataehora, ip_track) VALUES ('$idUtilizador', '$now', '$dataeHora', '$ip_track')"); // Insere um log da tentativa falhada com a data, hora e o ID do utilizador.
$stmt = $mysqli->prepare("UPDATE utilizador SET ultimo_Login = '$dataeHora', n_Tentativas = n_Tentativas + 1 WHERE utilizador = ? LIMIT 1"); // Insere a hora e data do ultimo login falhado e acrescenta 1 ao numero de tentativas.
$stmt-> bind_param('s', $utilizador); // Liga "$utilizador" ao parametro.
$stmt->execute(); // Executa a consulta preparada.
return false; // Login incorreto.
} else {
return false;
}
}
}
} else {
return false; // Conta bloqueada.
} // Conta bloqueada.
}else {
return false;
}
}
}
if ($stmt = $mysqli-> prepare("SELECT idUtilizador, utilizador, password, salt, perfilUtilizador, bloqueado, ultimo_Login, n_Tentativas FROM utilizador WHERE utilizador = ? LIMIT 1")) {
$stmt-> bind_param('s', $utilizador); // Liga "$utilizador" ao parametro.
$stmt-> execute(); // Executa a consulta preparada.
$stmt-> store_result(); // Armazena os resultados.
$stmt-> bind_result( $idUtilizador, $utilizador, $db_password, $salt, $perfilUtilizador, $bloqueado, $ultimo_Login, $n_Tentativas); // Obtem variaveis dos resultados.
$stmt-> fetch(); // Vai buscar os valores.
$password = hash('sha512', $password.$salt); // Verifica o hash de "$password" e "$salt.
$dataeHora = date("Y-m-d H:i:s");
if ($stmt-> num_rows == 1) { // Se o utilizador existir.
if ($bloqueado == 0) { // Verifica se a conta está bloqueada.
if ($db_password == $password) { // Verifica se a password da base de dados corresponde a password submetida pelo utilizador.
// Password esta correta.
$user_browser = $_SERVER['HTTP_USER_AGENT']; // Get the user-agent string of the user.
$idUtilizador = preg_replace("/[^0-9]+/", "", $idUtilizador); // Proteccao contra XSS para depois poder usar o print ou echo deste valor.
$_SESSION['idUtilizador'] = $idUtilizador;
$ip_track = $_SERVER['REMOTE_ADDR'];
$_SESSION['ip_track'] = $ip_track;
$utilizador = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $utilizador); // Proteccao contra XSS para depois poder usar o print ou echo deste valor.
$_SESSION['utilizador'] = $utilizador;
$perfilUtilizador = preg_replace("/[^0-9]+/", "", $perfilUtilizador); // Proteccao contra XSS para depois poder usar o print ou echo deste valor.
$_SESSION['perfilUtilizador'] = $perfilUtilizador;
$_SESSION['login_string'] = hash('sha512', $password.$user_browser);
return true; // Login correto.
} else {
if ($n_Tentativas >= 5) { // Verifica o numero de tentativas. Se o numero for maior ou igual a 5,a conta fica bloqueada.
$stmt = $mysqli->prepare("UPDATE utilizador SET bloqueado = '1' WHERE utilizador = ? LIMIT 1"); // Conta fica bloqueada.
$stmt-> bind_param('s', $utilizador);
$stmt->execute();
return false;
} else {
if($dataeHora > $ultimo_Login) { // Se a Data Atual for maior que a data do ultimo login falhado.
$dataeHora = date("Y-m-d H:i:s"); // Data atual
$now = time(); // Time atual.
$ip_track = $_SERVER['REMOTE_ADDR'];
$mysqli-> query("INSERT INTO tentativas_login (idUtilizador, time, dataehora, ip_track) VALUES ('$idUtilizador', '$now', '$dataeHora', '$ip_track')"); // Insere um log da tentativa falhada com a data, hora e o ID do utilizador.
$stmt = $mysqli->prepare("UPDATE utilizador SET ultimo_Login = '$dataeHora', n_Tentativas = n_Tentativas + 1 WHERE utilizador = ? LIMIT 1"); // Insere a hora e data do ultimo login falhado e acrescenta 1 ao numero de tentativas.
$stmt-> bind_param('s', $utilizador); // Liga "$utilizador" ao parametro.
$stmt->execute(); // Executa a consulta preparada.
return false; // Login incorreto.
} else {
return false;
}
}
}
} else {
return false; // Conta bloqueada.
} // Conta bloqueada.
}else {
return false;
}
}
}
função login_check:
Código :
function login_check($mysqli) { // Check if all session variables are set
if (isset($_SESSION['idUtilizador'], $_SESSION['utilizador'], $_SESSION['login_string'])) {
$idUtilizador = $_SESSION['idUtilizador'];
$login_string = $_SESSION['login_string'];
$utilizador = $_SESSION['utilizador'];
$perfilUtilizador = $_SESSION['perfilUtilizador'];
$user_browser = $_SERVER['HTTP_USER_AGENT']; // Get the user-agent string of the user.
if ($stmt = $mysqli-> prepare("SELECT password FROM utilizador WHERE idUtilizador = ? LIMIT 1")) {
$stmt-> bind_param('i', $idUtilizador); // Bind "$idUtilizador" to parameter.
$stmt-> execute(); // Execute the prepared query.
$stmt-> store_result();
if ($stmt-> num_rows == 1) { // If the user exists
$stmt-> bind_result($password); // get variables from result.
$stmt-> fetch();
$login_check = hash('sha512', $password.$user_browser);
if ($login_check == $login_string) {
// Logged In!!!!
return true;
} else {
// Not logged in
return false;
}
} else {
// Not logged in
return false;
}
} else {
// Not logged in
return false;
}
} else {
// Not logged in
return false;
}
}
if (isset($_SESSION['idUtilizador'], $_SESSION['utilizador'], $_SESSION['login_string'])) {
$idUtilizador = $_SESSION['idUtilizador'];
$login_string = $_SESSION['login_string'];
$utilizador = $_SESSION['utilizador'];
$perfilUtilizador = $_SESSION['perfilUtilizador'];
$user_browser = $_SERVER['HTTP_USER_AGENT']; // Get the user-agent string of the user.
if ($stmt = $mysqli-> prepare("SELECT password FROM utilizador WHERE idUtilizador = ? LIMIT 1")) {
$stmt-> bind_param('i', $idUtilizador); // Bind "$idUtilizador" to parameter.
$stmt-> execute(); // Execute the prepared query.
$stmt-> store_result();
if ($stmt-> num_rows == 1) { // If the user exists
$stmt-> bind_result($password); // get variables from result.
$stmt-> fetch();
$login_check = hash('sha512', $password.$user_browser);
if ($login_check == $login_string) {
// Logged In!!!!
return true;
} else {
// Not logged in
return false;
}
} else {
// Not logged in
return false;
}
} else {
// Not logged in
return false;
}
} else {
// Not logged in
return false;
}
}
forms.js:
Código :
function formhash(form, password) { // Create a new element input, this will be out hashed password field.
var p = document.getElementById("p");
// Add the new element to our form.
form.appendChild(p);
p.name = "p";
p.type = "hidden"
p.value = hex_sha512(password.value);
// Make sure the plaintext password doesn't get sent.
password.value = "";
// Finally submit the form.
form.submit();
}
var p = document.getElementById("p");
// Add the new element to our form.
form.appendChild(p);
p.name = "p";
p.type = "hidden"
p.value = hex_sha512(password.value);
// Make sure the plaintext password doesn't get sent.
password.value = "";
// Finally submit the form.
form.submit();
}
o sha512 está neste site (muito grande, ajuda na password): http://pajhome.org.uk/crypt/md5/sha512.html
Quando faço login no localhost fiz um echo para ver o que gera e mete isto:
a917d01789b58dfd3a702c715496269886f5d363d7445f42ee7b963e9de2a1da7dfbf0b88248ca648e69927353c0a76aaccd1d9b2ef1e32a7fe18ca3710f8929
Logado
e no servidor mesmo falhando aparece isto:
a917d01789b58dfd3a702c715496269886f5d363d7445f42ee7b963e9de2a1da7dfbf0b88248ca648e69927353c0a76aaccd1d9b2ef1e32a7fe18ca3710f8929
falhou
(é o mesmo)
O que se passará para dar no localhost e não no servidor??? Será que não está a comparar bem a password da base de dados com a password da form? Estive à procura o dia todo e não consigo saber mesmo porque não funciona mas sou noob nisto :/
Cumps