<?
// Страница авторизации
# Функция для генерации случайной строки
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")))
(($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, и проверяй != , а не !==, возможно будет работать как надо.
а ты обе строки приведи в string, и проверяй != , а не !==, возможно будет работать как надо.
Спустя 3 часа, 24 минуты, 46 секунд (27.02.2011 - 21:59) uWeb написал(а):
inpost, если привести в string то можно и !==, а не !=, зачем тогда приводить?
Спустя 34 минуты, 48 секунд (27.02.2011 - 22:33) Zerstoren написал(а):
Автор темы. мой совет.
Внимательно вникайте в азы, данная ошибка весьма очевидна.
Если что-то не понимаете, открываете учебник и вникаете что значит каждый оператор.
Только абсолютное понимание функции ведет к правильному коду.
Если в чем-то не уверены, используйте гугл/
Я сам ищу инфу если что-то не понимаю.
Внимательно вникайте в азы, данная ошибка весьма очевидна.
Если что-то не понимаете, открываете учебник и вникаете что значит каждый оператор.
Только абсолютное понимание функции ведет к правильному коду.
Если в чем-то не уверены, используйте гугл/
Я сам ищу инфу если что-то не понимаю.
_____________
Я не флудер , просто мне есть что сказать!
dictum - factum (сказано - сделано).