Вот код авторизации:
<?php
session_start();
// Загружаем данные о пользователях в ассоциативный массив $users
$data = file('users/users.inc', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$users = array();
foreach($data as $line)
{
list($u, $p) = explode ('|', $line);
$users[$u] = $p;
}
unset($data);
// Если поля логин и пароль, а также текст с капчей заполнены и нажата кнопка "Вход"
if(!empty($_POST['username']) && !empty($_POST['password']) && ($_SESSION['captcha'] == strtolower($_POST['securecode'])))
{
// Объявляем переменные
$username = strip_tags(trim($_POST['username'])); // логин
$password = strip_tags(trim($_POST['password'])); // пароль
$password = md5($password);
// Если сессия зарегистрированна, то объявляем ее в переменную
$sLogin = isset($_SESSION['username']) ? $_SESSION['username'] : NULL;
// Проверяем есть ли в массиве пользователь с ключом login и сравниваем пароли
if(isset($users[$username]) && $users[$username] == $password){
// Если условия выполнены, регистрируем сессию со значением логина
$_SESSION['username'] = $username;
// Рефрешемся
header('Location: '.$_SERVER['PHP_SELF']);
exit;
} else {
// Если пользователь в массиве отсутствует или пароли не совпадают, выводим соответствующее сообщение
echo 'Введены неверные данные';
}
}
// Если все-таки сессия зарегистрированна и переменная благополучно объявлена
if(isset($sLogin)){
// На всякий случай сверяемся с текущими показателями массива.
// На случай если пользователя удалили, а сессия у него все еще висит.
if(!isset($users[$sLogin]) || empty($users[$sLogin])) killSess();
// Если все в порядке - перенаправлем на панель управления
header('Location: panel.php');
exit;
} else { // Если пользователь не ввел данные - выводим форму ввода
echo '<form action="" method="post">';
echo '<table border="0">';
echo '<tr>';
echo '<td colspan="2">Введите Ваше имя:</td>';
echo '<td><input type="text" size="15" maxlength="20" name="username"></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2">Введите пароль:</td>';
echo '<td><input type="password" size="15" maxlength="16" name="password" ></td>';
echo '</tr>';
echo '<tr>';
echo '<td>Введите код с картинки:</td><td><img src="captcha.php" alt="защитный код"></td>';
echo '<td><input type="text" size="15" maxlength="10" name="securecode"></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2"><a href="regform.php"><input type="button" value="Регистрация" /></a></td>';
echo '<td><input type="submit" value="Вход"></td>';
echo '</tr>';
echo '</table>';
echo '</form>';
}
?>
А это капча:
<?php
$width = 100;
$height = 40;
$font_size = 12;
$let_amount = 5;
$back_let_amount = 30;
$path_fonts = 'fonts/';
$letters = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm',
'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', '2', '3', '4', '5', '6', '7', '9'
);
$colors = array('10', '30', '50', '70', '90', '110',
'130', '150', '170', '190', '210'
);
$im = imagecreatetruecolor($width, $height);
$back = imagecolorallocate($im, 255, 255, 255);
imagefill($im, 0, 0, $back);
$fonts = array();
$dir = opendir($path_fonts);
while($font_name = readdir($dir))
{
if($font_name !='.' && $font_name != '..')
$fonts[] = $font_name;
}
closedir($dir);
for($i = 0; $i < $back_let_amount; $i++)
{
$color = imagecolorallocatealpha($im, rand(0, 255), rand(0, 255), rand(0, 255), 100);
$font = $path_fonts . $fonts[rand(0, sizeof($fonts) - 1)];
$letter = $letters[rand(0, sizeof($letters) - 1)];
$size = rand($font_size - 2, $font_size + 2);
imagettftext($im, $size, rand(0, 45), rand($width * 0.1, $width - $width * 0.1),
rand($height * 0.2 , $height), $color, $font, $letter);
}
for($i = 0; $i < $let_amount; $i++)
{
$color = imagecolorallocatealpha($im, $colors[rand(0, sizeof($colors) - 1)],
$colors[rand(0, sizeof($colors) - 1)],
$colors[rand(0, sizeof($colors) - 1)], rand(20, 40));
$font = $path_fonts . $fonts[rand(0, sizeof($fonts) - 1)];
$letter = $letters[rand(0, sizeof($letters) - 1)];
$size = rand($font_size * 2.1 - 2, $font_size * 2.1 + 2);
$x = ($i + 1) * $font_size + rand(4, 7);
$y = (($height * 2) / 3) + rand(0, 5);
$code[] = $letter;
imagettftext($im, $size, rand(0, 15), $x, $y, $color, $font, $letter);
}
$_SESSION['captcha'] = implode('', $code);
header('Content-type: image/gif');
imagegif($im);
imagedestroy($im);
?>
При попытке авторизации уже зарегистрированного пользователя скрипт попросту обновляется, обнуляя поля формы, но вместо этого он должен перенаправлять пользователя в панель управления! Ребят, помогите, уже 3-й день с этой капчей мучаюсь
Спустя 8 часов, 6 минут, 52 секунды (16.02.2011 - 22:53) Bandicoot написал(а):
Ребят, кода вроде не так много, может есть мысли какие-нибудь? Догадываюсь, что проблема в механизме сессий...
Спустя 4 минуты, 4 секунды (16.02.2011 - 22:57) Winston написал(а):
Здесь готовая есть.
Спустя 19 минут, 43 секунды (16.02.2011 - 23:17) Evilsoul написал(а):
Он же говорит что не перенаправляет , причину нужно в хеадере искать или в условии, выполнено ли оно
Попробуй так:
И проверь или условие выполняется
Попробуй так:
header('Location: http://' . $_SERVER['HTTP_HOST'] . '/panel.php');
И проверь или условие выполняется
if(isset($users[$username]) && $users[$username] == $password)и убери exit для проверки
echo 'Пошло поехало.';
Спустя 1 минута, 2 секунды (16.02.2011 - 23:18) Evilsoul написал(а):
И ещё выше есть условие, его тоже проверь или выполняется
if(isset($sLogin)){
Спустя 20 минут, 4 секунды (16.02.2011 - 23:38) Bandicoot написал(а):
Хорошо ребят, спасибо, попробую, отпишусь если что
Спустя 18 часов, 36 минут, 54 секунды (17.02.2011 - 18:15) Bandicoot написал(а):
Цитата (PHPprogramer @ 16.02.2011 - 19:57) |
Здесь готовая есть. |
Большое спасибо, она работает! До этого перепробовал 3 варианта, но этот оказался оптимальным. Вообще классный сайт ребята сделали: irbis-team.com, постоянно пользуюсь их справочником функций плюс все разжевано до мелочей!
_____________
Работаю с Уии