Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Админка


Автор: Onis 18.6.2005, 14:55
Здрасти smile
Народ, не подскажите как админку правильно заблокировать для посторонних, я пытался сделать напролом, сравнивая введенный пароль с его хэш-кодом но этот способ постоянно глючит. smile

Автор: PARROT 18.6.2005, 15:07
Код

 setcookie("login", $login);
 setcookie("paswword", $pass);

Автор: Onis 18.6.2005, 15:11
Коротко и неясно smile .

Можно поподробнее чуток, я ж еще новичок.

Автор: PARROT 18.6.2005, 15:31
При входе, если все условия верны, ставь куки.
При выходе куки удаляй.

Автор: Onis 18.6.2005, 15:44
Как я понял переменные $login и $pass вводтся через формы?

Может у кого-то есть ссылочка на примеры использования кук а то я о них только второй раз слышу smile

Автор: PARROT 18.6.2005, 15:46
name формы, это имена наших переменных, на которые при проверки условия, ставятся куки.
Если конечно все верно.

Вот ссылка на русском http://php.rinet.ru/manual/ru/features.cookies.php

Автор: Onis 18.6.2005, 16:21
А можно сделать так чтоб куки удалялись когда закрываешь страничку?

Автор: Bikutoru 18.6.2005, 16:36
Нет. Cookie будут храниться пока не истечет срок их действия, или пока они не будут удалены самим пользователем... Если обязательно нужно удуаление с закрытием окна, то имеет смысл использовать переменные $_SERVER["PHP_AUTH_USER"] и $_SERVER["PHP_AUTH_PW"]...
Пример с php.net:
Код

<?php
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header("WWW-Authenticate: Basic realm=\"My Realm\"");
    header("HTTP/1.0 401 Unauthorized");
    echo "Текст, отправляемый в том случае,
    если пользователь нажал кнопку Cancel\n";
    exit;
  } else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>Вы ввели пароль {$_SERVER['$PHP_AUTH_PW']}.</p>";
  }
?>

Только есть такая особенность: если вводишь неправильный логин/пароль, то нужно закрывать окно и открывать новое, причем через Ctrl+N (в IE) не получится - окно, порожденное от данного, использует ту же комбинацию логин/пароль...

Автор: Onis 18.6.2005, 16:49
Ну я примерно так делаю:
Код

if(!isset($login) or !isset($pass))
    pass_form();
else
{
    if($pass==123 and $login=='Onis' )
    {
        setcookie("login", $login);
        setcookie("password", $pass);
    }
    else
        echo("error");
}
if(isset($password))
{
    echo("wellcome!");
    setcookie("login", "");
    setcookie("password", "");
}


Этот код я для теста сделал, у меня появляется ошибка в строке удаления куков, пишет что мол я уже послал заголовки.

Или я неправильно строю алгоритм?

Автор: Рыжий 18.6.2005, 16:54
Обьясняю понятно:
Хранишь пароли и логины админов в Базе данных, проверяешь правильный ввод с обыкновенной формы, вот пример:

Код

<html>
<head>
  <title></title>

<style type="text/css">
td{border-color:#ffffff; color:#FFFFFF; font-weight:700;}

</style>
</head>


<body bgcolor="black">
<table border=0 width=100% height=100%>
<tr valign="middle" align="center"><td>
<center>
<form name="stepin" action="auth.php" method="post">

<table valign="middle" align="center" border=0><tr><td align="right">
Имя: </td><td><input name="name" type="text" value=""></td></tr>
<tr><td align="right">   Пароль:</td><td><input name="pass" type="password" value=""></td></tr>
<tr><td colspan=2 align=right><input type="submit" value="Вход"></td>
</table>
</form>
</td></tr>
</table>


После этого будешь иметь 2 переменные $_POST['name'] - логин и $_POST['pass'] - пароль.
Далее регистрируем кукисы - эти 2 переменные как раз подойдут.
Соответственно нужно начать сессию - один из лучших вариантов, сессию уже никто не сможет подделать и если ты будешь админить сайт - вместо тебя никто уже не зайдет smile т.к. украсть сессию очень сложно.
После того как ты закроешь окно браузера - сессия автоматом удалится.
Вроде все, будут вопросы спрашивай smile

Автор: PARROT 18.6.2005, 16:56
Код

<?php
ob_start();
error_reporting(7);
?>
<html>
if(!isset($login) or !isset($pass))
    pass_form();
else
{
    if($pass==123 and $login=='Onis' )
    {
        setcookie("login", $login);
        setcookie("password", $pass);
    }
    else
        echo("error");
}
if(isset($password))
{
    echo("wellcome!");
    setcookie("login", "");
    setcookie("password", "");
}
</html>
<?php
ob_end_flush();
?>

И больше ругаться не будут! Гарантия 100 пр...
А сессии для начинающих не сложны...?
Использовать или не использовать глобалку дело каждого, но лучше использовать! Потому как есть гарантия, что работать будет везде!
И еще пароль лучше хранить в закрытом виде, в функции md5() + чтобы не украли, к паролю стоит привязать какое-нибудь слово типа "Попка дурак". Тоесть слово, которое никто незнает. Тогда гарантия, что сопрут, растворяется.

Автор: Onis 18.6.2005, 17:49
Спасибо всем, вроде работает.

И извините если достал smile

Автор: PARROT 18.6.2005, 17:55
Не за што... smile

Автор: Mal Hack 19.6.2005, 09:23
В FAQ уже есть, между прочим ;)
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=2849

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)