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


Автор: XOMbl4 4.1.2006, 13:59
Собсно нужно зделать систему авторизации без использования БД,нужно применить файлы для хранения.У меня пока не получилоси это сделать,вот мой код:

Я непонимаю в чем проблема,постоянно пишет про неверный логин(((
Код



<?php
session_start();
print("<title>Àäìèíêà</title>");
$_SESSION["login"]=$_REQUEST["login"];
$_SESSION["paasword"]=$_REQUEST["paasword"];
if(!$_SESSION["login"]){
 print("<center>Íå ââåäåí ëîãèí.</center>");
  exit();
}
if(!$_SESSION["paasword"]){
 print("<center>Íå ââåäåí ïàðîëü.</center>");
  exit();
}

$us=file("XOMbl4/uzvers.txt");
foreach($us as $val){
list($log, $pass, $ind)=explode("^^","$val");
    if($_SESSION["login"]!==$log) {
       print("Ëîãèí íåâåðåí");
       exit();
    }else{
        if($_SESSION["paasword"]!==$pass ){
        print("Ïàðîëü íåâåðåí");
        exit();
     }else{
        if($ind!==$ind){
         print("Ãûã");
        }else{

Тут админка
}
}
}
}

?>

ЗЫ:А чего так криво код вставляецца?

Автор: Guedda 4.1.2006, 14:10
Цитата

Я непонимаю в чем проблема,постоянно пишет про неверный логин((( Добавлено @ 13:59 Блин,а чего код криво вставляется???

Так вот... У меня такая же проблема, исправить обещали.
А по правилам как действовал я... Вот, собственно, метод, который я где-то отрыл в инете.:
Цитата

Сначала создать файл admandpass.php. В нем написать следующее:
Код

<?
  $name_admin="Твое имя";
  $temp_pass="Твой пароль";
  $adm_pass=md5($temp_pass);
?>


После этого пишем сисму авторизации index.php:
Пояснения: pass_b : введенный пароль; login - введенный логин
Код

  include("admandpass.php");
  $pass_user=md5($pass_b);
  if($pass_user==$adm_pass and $login==$name_admin)
  {
    setcookie("log[1]", "$pass_user",time()+3600, '/'); 
    setcookie("log[2]", "$login",time() + 3600, '/');
    print "Вы вошли в систему";
    print "<META http-equiv=\"refresh\"content=\"0;URL=admin.php\">";
  }
    else
  {
    print "Неправильный логин или пароль";
    print "<META http-equiv=\"refresh\" content=\"1;URL=index.php\">";
  }

И потом в каждом модуле, которые Вы хотите защитить, пишите:
Код

<?
  include("admandpass.php"); 
  if($log[1] !=$adm_pass and $log[2] !=$name_admin)
  {
    print "<META http-equiv=\"refresh\" content=\"0;URL=index.php\">";
  }
?>


Вот этим я и пользуюсь.

Автор: XOMbl4 4.1.2006, 14:19
Мне нужно не для админа а для юзверей,то есть народ регицца,в файл пишутся данные типа log^^pass^^id,и потом по ним нада работать,для сибя я через хтаксес зделал защиту,дабы не парицца.

Автор: AztEK 4.1.2006, 15:44
Guedda
Плохой пример!
Через Cookies делать авторизацию нельзя!

Я использую такое:
Код

session_start();

/*

Получаем данные, бд, файлы, неважно...
$name - логин
$pass - пароль

*/

if (isset($_POST['name']) && isset($_POST['pass']))
{
    unset($_SESSION['name']);
    unset($_SESSION['pass']);
        
        if (md5($_POST['name']) == $name && md5($_POST['pass']) == $pass)
        {
            $logined = 1;
            $_SESSION['name'] = md5($_POST['name']);
            $_SESSION['pass'] = md5($_POST['pass']);
        }
        else
        {
            $logined = 0;
        }
    }
}

if (!(isset($_SESSION['name']) && isset($_SESSION['pass'])))
{
    $logined = 0;
}
else
{
    if ($_SESSION['name'] == $name && $_SESSION['pass'] == $pass)
    {
        $logined = 1;
    }
    else
    {
        $logined = 0;
        unset($_SESSION['name']);
        unset($_SESSION['pass']);
    }
}

if ($logined)
{
//сама страница, можно include другой
}
else
{
//показываем форму авторизации
}


В принципе надо ещё HTTP_REFERER смотреть, но это уже трабл...
Добавлено @ 15:44
Блин, ну почему код криво отображается? :smile

Автор: XOMbl4 4.1.2006, 15:48
Блин,опять же,трабл у миня не в сравнивании а в получении этих самых данных,в файле с логинами много этих самых логинов,проблема в их получее,сравнить то лико....

Автор: Mal Hack 4.1.2006, 15:48
Цитата(AztEK @ 4.1.2006, 15:44 Найти цитируемый пост)

Через Cookies делать авторизацию нельзя!

Все можно. Только надо понимать, что при любой авториазции хранить данныев одном месте нельзя.

Ребят, есть же статья: http://vingrad.ru/PHP-ART-002849, где вместо запросов к БД надо реализовать чтение и запись в файл. Алгоритм там уже есть.

Автор: CyClon 5.1.2006, 11:45
Если хочешь красивую... То только с файлами + Куки...
А если нет - .htpasswd .htacces или как там их...

Автор: XOMbl4 5.1.2006, 17:06
Да блин(((Проблема в том,что я не могу организовать считывание логинов-паролей,бд нет,потому делаю на файлах(((

Автор: wsr 7.1.2006, 12:47
Цитата(XOMbl4 @ 5.1.2006, 17:06 Найти цитируемый пост)

Да блин(((Проблема в том,что я не могу организовать считывание логинов-паролей,бд нет,потому делаю на файлах(((

Ну ты что, не можешь прочитать то!
Допустим у тебя пассы и логины храняться в файле следующим образом :
пасс|логин
пасс|логин
пасс|логин
пасс|логин
Так тебе нужно то всего лишь пройтись по файлу в поисках нужных полей!
Код

<?php
    $fp = file("some_auth_text_file");
    for ( $i = 0 ; $i<sizeof($fp); $i++):
         list ($pass, $login)  = explode ("|", $fp[$i]);
         # А тут уже проверяешь подходит ли пасс с логином! И если подходит, то делаешь что нужно!
         # Можешь конечно прогнать $pass, $login через trim, а то мало ли!
    endfor;
?>


Вроде бы все просто!

Автор: XOMbl4 7.1.2006, 15:02
Вот мой код:
Код

<?php
session_start();
$_SESSION["login"]=$_REQUEST["login"];
$_SESSION["paasword"]=$_REQUEST["paasword"];
if(!$_SESSION["login"]){
 print("<center>е вееден логин.</center>");
  exit();
}
if(!$_SESSION["paasword"]){
 print("<center>Не введен пароль.</center>");
  exit();
}

$us=file("XOMbl4/uzvers.txt");
for ( $i = 0 ; $i<count($us); $i++){
list($log, $pass, $ind)=explode("^^","$val");
    if($_SESSION["login"]!==$log) {
       print("Логин неверен");
       exit();
    }else{
        if($_SESSION["paasword"]!==$pass ){
        print("Пароль неверен");
        exit();
     }else{


Тут админка
}
}
}
}

?>

Читат тока последнуу строку из файла,если ввести данные из последней строки-все окей,если из какой либо другой-не пускает(((

Автор: DrNemo 7.1.2006, 15:31
а вот с этим я сталкивался:


Код

$mas = file ("../users/user.txt"); 
    foreach ($mas as $value){    
    list($id,$logins,$passs)=explode(";;","$value"); //Разбиваем файл
    if($_POST['login'] == $logins):
         $dd="1"; 
    elseif($_POST['pass']==$passs):
         $dd="2";
         break;
    else:   
         $dd="0";
    endif;
    }

//далее вывод:
if($dd==1):
 .....
elseif($dd==2):
 .....
elseif($dd==0):
 .....
endif;    

Автор: XOMbl4 7.1.2006, 17:04
Хитро)))Ща попробую)))
ЗЫ:Где то слышал,что можно определить,нажата ли была кнопка в форме или нет,а вот как?пробовал конструкцию вида
if(!ИМЯ_ФОРМЫ){
}
Но не покатило(

Автор: Illuminaty 7.1.2006, 17:10
Цитата(XOMbl4 @ 7.1.2006, 18:04 Найти цитируемый пост)

ЗЫ:Где то слышал,что можно определить,нажата ли была кнопка в форме или нет,а вот как?
Если у кнопки name="mybutton", то проверяй
Код

isset($_POST["mybutton"])

Автор: Guedda 9.1.2006, 11:53
Цитата(XOMbl4 @ 4.1.2006, 14:19)
Мне нужно не для админа а для юзверей,то есть народ регицца,в файл пишутся данные типа log^^pass^^id,и потом по ним нада работать,для сибя я через хтаксес зделал защиту,дабы не парицца.

Для этого файлами пользоваться нельзя, так как обычный файл можно прочитать.
Я думаю, что без MySQL не обойтись.

Автор: XOMbl4 9.1.2006, 12:16
Да пусть читают наздоровье,во первых это .php файл,во творых там хранятся хеши,а не сами пароли,md5() рулит.

Автор: kpuknet 29.1.2006, 01:12
Хорошо, а как тогда сделать авторизацию так, чтобы чел мог зайти автоматически на след день, т.е. чтобы не пришлось каждый день вводить логин и пароль ?

Автор: AztEK 29.1.2006, 09:38
kpuknet поставь куку

Автор: Mal Hack 29.1.2006, 12:25
Выше есть ссылка на статью, где все это есть, только там интервал маленький стоит.

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