Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация на PHP, Как это работает? 
V
    Опции темы
OutlawZ
  Дата 17.10.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Помогите понять общий принцип разработки авторизации для админки, дело в том что я использую всегда для админки аутентификацию Apache и вот хотел просто сделать, вход в админку с помощью PHP без аутентификации, то есть в папке /adm/ лежат скрипты index.php, edit.php
и суть такая что мол когда я к папке обращаюсь выводится форма мол введите логин и пароль и только тогда будет доступен edit.php ну вот тока я не могу понять принцип реализации.
Т.е это что получается, что в edit.php придется подключать index.php и проверять функцию ввода логина и пароля? Хотя примерно понятно как быть с этим, а вот скажем в папке adm лежат другие файлы то как к ним я могу доступ заблокировать не авторизированым админам? т.е с при помощи apache аутентификации пока не пройдешь авторизацию хрен получишь доступ к папке и файлам в ней.

Как это можно сделать без Apache? 
Использовать .htaccess???
Выставить chmod на папку????

Помогите понять принцип действия, еще напоминаю что авторизация на php должна быть без использования аутентификации. Заранее спасибо. 
Ну ламерек я в этом вопросе, не когда не делал признаюсь ))))  


--------------------
user posted image
user posted image
PM MAIL   Вверх
youri
Дата 17.10.2009, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



PM   Вверх
Ипатьев
Дата 17.10.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(OutlawZ @  17.10.2009,  08:27 Найти цитируемый пост)
Как это можно сделать без Apache? 
Использовать .htaccess???

очень смешной вопрос. 
.htaccess - это конфигурационный файл Апача.

Цитата(OutlawZ @  17.10.2009,  08:27 Найти цитируемый пост)
в папке adm лежат другие файлы 

другие - это какие? .php или еще какие-то?
PM MAIL   Вверх
sdukshis
Дата 17.10.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 23.3.2009

Репутация: нет
Всего: 1



Наиболее удобный, на мой взгляд, способ авторизации - это использование механизма сессий.
PM MAIL   Вверх
OutlawZ
Дата 17.10.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Цитата(Ипатьев @  17.10.2009,  09:59 Найти цитируемый пост)
Цитата(OutlawZ @  17.10.2009,  08:27 Найти цитируемый пост)
Как это можно сделать без Apache? 
Использовать .htaccess???

очень смешной вопрос. 
.htaccess - это конфигурационный файл Апача.


Я имел в виду  что в .htaccess прописать запрет на просмотр фалов в папке, т.е можно к примеру запретить просматривать файлы с расширением .tpl и тогда далее.

Цитата(Ипатьев @  17.10.2009,  09:59 Найти цитируемый пост)
Цитата(OutlawZ @  17.10.2009,  08:27 Найти цитируемый пост)
в папке adm лежат другие файлы 

другие - это какие? .php или еще какие-то? 


Да еще файлы, от банального .css до скажем каких нить текстовых файлов 


--------------------
user posted image
user posted image
PM MAIL   Вверх
Ипатьев
Дата 18.10.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Авторизация к запрету просмотра файлов отношения не имеет.
Авторизация не запрещает, а регулирует доступ. 

Обычно никто не запаривается по поводу css в админке. И ограничиваются авторизацией только для php файлов. 
Если хочется сделать парольный доступ ко всему содержимому папки, то самое простое - это аутентификацию Apache для папки через .htaccess
читать про authname и далее


PM MAIL   Вверх
OutlawZ
Дата 25.10.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Привет, попробовал по совету сделать авторизацию с помощью сесии, но у меня проблема большая так как я не когда не делал данного кода.

Код файла auth.php
Код

 include("config.php"); #Подключаю файл для связи с бд
 session_start();          #Начинаем сессию
 db_connect();             #Связь с БД
 $query = "SELECT * FROM user";    #Запрос к базе
 $result = mysql_query($query) or die (mysql_error()); 
 
 $logged = 0; #Переменная доступа

if(isset($_POST['aut']))
{
 
 $_SESSION['username'] = $_POST['user'];
 $_SESSION['password'] = md5($_POST['pass']);
}

Получаем из БД пароли и логины 
 while($shell = mysql_fetch_array($result))
 { 
  if(($_SESSION['username'] == $shell[login]) and ( $_SESSION['password'] === $shell[password]))
  {
   $logged = 1; #Если все правильно то ставим 1
  }else{
   $logged = 0; #Если нет то стоим на месте
  } 
 }

#Если 0 то выводим форму авторизации 
if($logged == 0){
 print("<caption>Авторизация:</caption>
        <form method='post'>
        <table border='0' width='20%'>
        <tr><td>Login:</td><td><input type='text' name='user'></td></tr>
        <tr><td>Password:</td><td><input type='password' name='pass'></td></tr>
        </table>
        <input type='submit' name='aut' value='Авторизация'>
        </form>
       ");
}
 

Я понимаю что код страшный но с чего то начинать надо, но это еще не все, вот:

index.php
Код

include("auth.php"); #Подключаем файл с авторизации
 
 if(!$logged == 1) die; #Если не были авторизированы то убить и вывести форму с авторизации

#Если все хорошо то вывести форму регистрации
 print("<caption>Регистрация:</caption>
        <form method='post'>
        <table width='20%'>
        <tr><td>Login:</td><td><input type='text' name='login'></td></tr>
        <tr><td>Password:</td><td><input type='password' name='paswd'></td></tr>
        </table>
        <input type='submit' name='reg' value='Регистрация'>
        </form>
       ");
       
Добавить нового пользователя:
 if(isset($_POST['reg']))
 {
  $sh = md5($_POST['paswd']);
  $query = "INSERT INTO user(login,password) VALUES ('$_POST[login]','$sh')";
  mysql_query($query) or die (mysql_error());
  print("Пользователь добавлен!");
 }


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

Это черновой вариант я конечно не проверяю пока переменные на символы и т.д но я это все сделаю когда с механизм отлажу. 

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


--------------------
user posted image
user posted image
PM MAIL   Вверх
Bishop
Дата 26.10.2009, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 1
Всего: 16



OutlawZ, код чудовищный.
Код

include("config.php");
session_start();

function logged() {
   return (bool)$_SESSION['logged'];
}

$msg = '';
if (isset($_POST['aut'])) {
   db_connect();
   $query = "SELECT * FROM user WHERE login='{$_POST['user']}' LIMIT 1";
   $result = mysql_query($query) or die (mysql_error());
   if (mysql_num_rows($result) == 0) {
      $msg = 'User not found';
   } else {
      $shell = mysql_fetch_array($result);
      $_SESSION['logged'] = $shell['password'] == md5($_POST['pass']);
      if (!logged())
         $msg = 'Incorrect password';
   }
}

if (!logged()) {
   if ($msg)
      print $msg;
   print "<caption>Авторизация:</caption>
      <form method='post'>
      <table border='0' width='20%'>
      <tr><td>Login:</td><td><input type='text' name='user'></td></tr>
      <tr><td>Password:</td><td><input type='password' name='pass'></td></tr>
      </table>
      <input type='submit' name='aut' value='Авторизация'>
      </form>";
}


Чтобы посмотреть на свою ошибку, замените участок проверки в своем коде на:
Код
while ($shell = mysql_fetch_array($result)) { 
  if(($_SESSION['username'] == $shell[login]) and ( $_SESSION['password'] === $shell[password])) {
    print '> login';
  } else {
    print '< logout';
  }
}
die;


Это сообщение отредактировал(а) Bishop - 26.10.2009, 01:20
PM WWW ICQ   Вверх
OutlawZ
Дата 26.10.2009, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

Репутация: нет
Всего: нет



Елы палы вот прожестил, Bishop спасибо! Мда Фленова читать не буду


--------------------
user posted image
user posted image
PM MAIL   Вверх
LSIchip
Дата 6.11.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.3.2009

Репутация: нет
Всего: нет



у меня тут тоже вопрос с регистрацией возник, правда немного другого рода)
вот код для проверки существования пользователя на сервере. если такой логи уже есть, то выводится ошибка. но работает всё это дело не так как нужно. ошибка вылазиет даже тогда когда пользователя нету. что делать?
Код

$result = mysql_query("SELECT id FROM users WHERE login='$login'");
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) 
{
    die('{status:0,txt:"User already exists"}');
}


PM MAIL ICQ   Вверх
youri
Дата 6.11.2009, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 6
Всего: 16



отлаживать: var_dump($my_row)
p.s. http://phpfaq.ru/slashes

Добавлено через 1 минуту и 12 секунд
p.p.s. пожалуй лучше SELECT COUNT(id)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.