[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с хешем и айпи
dgalexei
имеется два файла index.php


<?
// Страница авторизации
# Функция для генерации случайной строки

function generateCode($length=6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789";
$code = "";
$clen = strlen($chars) - 1;
while (strlen($code) < $length) {
$code .= $chars[mt_rand(0,$clen)];
}
return $code;
}
# Соединямся с БД
mysql_connect("localhost", "root", "");
mysql_select_db("testtable");
if(isset($_POST['submit']))
{
# Вытаскиваем из БД запись, у которой логин равняеться введенному
$query = mysql_query("SELECT user_id, user_password FROM users WHERE user_login='".mysql_real_escape_string($_POST['login'])."' LIMIT 1");
$data = mysql_fetch_assoc($query);
# Соавниваем пароли
if($data['user_password'] === md5(md5($_POST['password'])))
{
# Генерируем случайное число и шифруем его
$hash = md5(generateCode(10));
$insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
# Записываем в БД новый хеш авторизации и IP
mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'");
# Ставим куки

setcookie("id", $data['user_id'], time()+60*60*24*30);
setcookie("hash", $hash, time()+60*60*24*30);
# Переадресовываем браузер на страницу проверки нашего скрипта
header("Location:proga.php");
exit();
}
else
{
print "Вы ввели неправильный логин/пароль";
}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">

<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />

<
title>Авторизация</title>

<
link rel="shortcut icon" href="/favicon.ico">
<
link rel="stylesheet" type="text/css" href="style.css" />
</
head>

<
body>

<
form method="post">
<
fieldset>

<
legend>Log in</legend>

<
label for="login">Логин</label>
<
input type="text" id="login" name="login"/>
<
div class="clear"></div>

<
label for="password">Пароль</label>
<
input type="password" id="password" name="password"/>
<
div class="clear"><br />
</
div>

<
label for="remember_me" style="padding: 0;"></label>
<
div class="clear"></div>

<
br />

<
input type="submit" style="margin: -20px 0 0 287px;" class="button" name="submit" value="Вход"/>
</
fieldset>
</
form>

</
body>

</
html>




и файл proga.php



<?
// Скрипт проверки
# Соединямся с БД

mysql_connect("localhost", "root", "");
mysql_select_db("testtable");

if (isset($_COOKIE['id']) and isset($_COOKIE['hash']))
{
$query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1");
$userdata = mysql_fetch_assoc($query);

if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id'])
or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0")))
{
setcookie("id", "", time() - 3600*24*30*12, "/");
setcookie("hash", "", time() - 3600*24*30*12, "/");
print "Хм, что-то не получилось";
}
else
{
print "Привет, ".$userdata['user_login'].". Всё работает!";
}
}

else
{
print "Включите куки";
}
?>



, который грузится после выполнения сценария в index.php так вот после выполнения proga.php на экран выводится "Хм, что-то не получилось "(условие ошибки в proga.php)

при выполнение index.php все проходит нармально, формируется как хеш так и строка IP.

Вот и что ему может быть нужно??? :unsure:




:unsure: :unsure:



Спустя 1 час, 12 минут, 4 секунды (27.02.2011 - 06:10) inpost написал(а):
Логично, что сработало это условие:
(($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0")))

Спустя 2 часа, 46 минут, 1 секунда (27.02.2011 - 08:56) dgalexei написал(а):
я понимаю... вот мне скорее интересна причина почему оно не сработало(

Спустя 3 минуты, 38 секунд (27.02.2011 - 09:00) inpost написал(а):
Делай по отдельности:
if($userdata['user_hash'] !== $_COOKIE['hash'])
exit('Проблема в первом условии');
elseif($userdata['user_id'] !== $_COOKIE['id'])
exit('Проблема во втором условии');
elseif(($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0"))
exit('Проблема в третьем условии');

Сам сможешь увидеть свою же ошибку.

Спустя 14 минут, 5 секунд (27.02.2011 - 09:14) dgalexei написал(а):
Сейчас попробую... Отпишусь...

Спустя 15 минут, 21 секунда (27.02.2011 - 09:29) dgalexei написал(а):
Да, действительно, проблема в третьем условии
if(($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR'])  and ($userdata['user_ip'] !== "0"))


но вот причину не пойму((((((

Спустя 12 минут, 35 секунд (27.02.2011 - 09:42) dgalexei написал(а):
ай пи в базу попадает точно, без проверки и этот скрипт работает... Чушь какая то(((((((

Спустя 8 часов, 45 минут, 18 секунд (27.02.2011 - 18:27) dgalexei написал(а):
Видимо никто не поможет тут...

Спустя 6 минут, 43 секунды (27.02.2011 - 18:34) inpost написал(а):
dgalexei
а ты обе строки приведи в string, и проверяй != , а не !==, возможно будет работать как надо.

Спустя 3 часа, 24 минуты, 46 секунд (27.02.2011 - 21:59) uWeb написал(а):
inpost, если привести в string то можно и !==, а не !=, зачем тогда приводить?

Спустя 34 минуты, 48 секунд (27.02.2011 - 22:33) Zerstoren написал(а):
Автор темы. мой совет.

Внимательно вникайте в азы, данная ошибка весьма очевидна.
Если что-то не понимаете, открываете учебник и вникаете что значит каждый оператор.

Только абсолютное понимание функции ведет к правильному коду.
Если в чем-то не уверены, используйте гугл/

Я сам ищу инфу если что-то не понимаю.


_____________
Я не флудер , просто мне есть что сказать!
dictum - factum (сказано - сделано).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.