Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: авторизация или как определять админа или user
 
 автор: Spyder   (30.11.2006 в 12:40)   письмо автору
 
 

Привет всем!!!
Есть система авторизации с привилегиями.
Вот скрипт
Форма авторизации

<?php
 session_start
();

?>
<form action=handler.php method='post'>
 <table>
  <tr>
   <td>имя посетителя: <input type='text' name='name' value=<?php echo $_SESSION['user']; ?>></td>
  </tr>
  <tr>
   <td>пароль: <input type='password' name='passwd' value=<?php echo $_SESSION['password']; ?>></td>
  </tr>
  <tr>
   <td>
  <input type=submit value=Войти>
  <input type=hidden name='session_id' value=<?php echo session_id(); ?>>
   </td>
  </tr>
  </form>
  <?php
  
//Если посетитель вошел приветствуем его
  
if(isset($_SESSION['user']))
   {
    echo 
"Здравствуйте, ".$_SESSION['user']."!";
   }
  
?>


Обработчик

<?php
session_start
();
//соединение с БД
include "config.php";
// Обработчик формы
if(!empty($_POST['name']) && !empty($_POST['passwd']))
 {
  
//Сравниваем переданный идентификатор из формы
  //с текущим идентификатором сессии
  
if($_POST['session_id'] != session_id())
   {
     echo 
session_id();;
     exit(
"Попытка передачи данных с другого хоста. Скрипт остановлен.");
   }
  
// Защищаясь от SQL-инъекции, пропускаем
  // полученные пароль и логин через функцию
  // mysql_escape_string
   
if (!get_magic_quotes_gpc())
    {
      
$_POST['name'] = mysql_escape_string($_POST['name']);
      
$_POST['passwd'] = mysql_escape_string($_POST['passwd']);
    }
  
//Формируем и выполняем SQL-запрос имеется ли пользователь
  //с именем $_POST['name']
   
$query "SELECT pass=MD5('$_POST[passwd]'), statususer FROM userlist WHERE name='$_POST[name]'";
   
$nme mysql_query($query);

 if(!
$nme) exit("Ошибка выполнения запроса");
 
//Если запрос вернул результат - производим дальнейшую обработку
  
if(mysql_num_rows($nme) > 0)
   {
    
//Идентификация прошла успешно - осуществляем
    //вход посетителя
    
if(session_start())
     {
       
$_SESSION['user'] = $_POST['name'];
       
$_SESSION['password'] = $_POST['passwd'];
       
//статус пользователя
       
$_SESSION['stat'] = mysql_result($nme,0,"statususer");
       
//Осуществляем переход
       
echo "<html><head>
           <meta http-equiv='Refresh' content='0; URL=index.php'>
          </head><body>"
;
     }
     else exit(
"Ошибка идентификации: неправильный пароль");
  
//Если в результате запроса не получено ни одной
  //строки - посетитетль с таким именем не зарегистрирован
  
}
  else exit(
"Ошибка индентификации: посетитель не зарегистрирован");
 }
 else exit(
"Error");

?>

и файл index.php

<?php
session_start
();
if(!empty(
$_SESSION['user']))
{
 echo 
"hellom, ".$_SESSION['user'];
}
if(
$_SESSION['stat'] == 'user')
{
 echo 
"<br />Вы не админ";
}
elseif(
$_SESSION['stat'] == 'admin')
{
 echo 
"<br />Привет админ ".$_SESSION['user'];
}
else
{
 echo 
"Вам сюда запрещено";
}
?>

Вопрос в том, как лучше сделать проверку статуса пользователя?

   
 
 автор: elenaki   (30.11.2006 в 12:51)   письмо автору
 
   для: Spyder   (30.11.2006 в 12:40)
 

если вы проверяете статус из админского модуля, куда могут заходить только юзеры со
статусом админа, так и выбирайте только их из базы! сессии проще подделать, чем запрос.

 $query = "SELECT pass=MD5('$_POST[passwd]') FROM userlist WHERE name='$_POST[name]' AND statususer = 'admin'";

   
 
 автор: Spyder   (30.11.2006 в 13:07)   письмо автору
 
   для: elenaki   (30.11.2006 в 12:51)
 

Что то ни то, может я не так объяснил.
Есть сат с админкой.
На сайте пользователи авторизируются, если это админ то появляется дополнительное меню
с ссылкой в админку сайта, структура сайта:
modules
- guest
index.php - это и другие файлы будут выводится на сайте
config.php
- admin - папка в эту папку может заходить только админ
index.php -
addmessage.php
answer.php
как осуществить чтоб только админы заходили в эту папку, но авторизацию проходили один раз.
Я уже чета вообще запутался.

   
 
 автор: Spyder   (30.11.2006 в 13:36)   письмо автору
 
   для: Spyder   (30.11.2006 в 13:07)
 

up

   
 
 автор: moonfox   (30.11.2006 в 13:41)   письмо автору
 
   для: Spyder   (30.11.2006 в 13:36)
 

если все пользователи в одной таблице - введи доп поле тида admin - а там скажем переменую. 0 или 1 - и проверяй кто авторизировался

   
 
 автор: Spyder   (30.11.2006 в 13:52)   письмо автору
 
   для: moonfox   (30.11.2006 в 13:41)
 

>если все пользователи в одной таблице - введи доп поле тида admin - а там скажем переменую. 0 или 1 - и проверяй кто авторизировался
Вот таблица user, я и так написал проверку определения статуса пользователя

           id_usr     int(8)      auto_increment                                   
      name     text                                                  
      pass     tinytext                                              
      email     tinytext                                        
      puttime     datetime                                    
      statususer     enum('user', 'adm')

Мне не понятно как на других страницах сделать проверку?
Может кто пример привидет с доступом для определенных пользователей, как они проверяет что напр-р это адми?

   
 
 автор: moonfox   (30.11.2006 в 13:58)   письмо автору
 
   для: Spyder   (30.11.2006 в 13:52)
 

во время авторизации вноси в сессию значение переменной из поля админ - при переходах по станицам как обычно запускай сесии и проверячй если переменная отвечающая за статус равна 0 то... если 1 то...

   
 
 автор: Spyder   (30.11.2006 в 14:08)   письмо автору
 
   для: moonfox   (30.11.2006 в 13:58)
 

ну у меня так и сделано я хотел насколько это безопасно.

   
 
 автор: moonfox   (30.11.2006 в 14:11)   письмо автору
 
   для: Spyder   (30.11.2006 в 14:08)
 

прикол..:))))))
а тему назвал как определить...
все же пашет! улыбайся! :))))))))))
можешь в куки писать еще

   
 
 автор: Spyder   (30.11.2006 в 14:17)   письмо автору
 
   для: moonfox   (30.11.2006 в 14:11)
 

просто у меня были подозрения, что это делается немного подругому. А как и кого в куки писать и для чего, объясните плиз!!!

   
 
 автор: moonfox   (30.11.2006 в 14:25)   письмо автору
 
   для: Spyder   (30.11.2006 в 14:17)
 

при авторизации можно использовать cookies вместо сессий - заносить туда даные о пользователе и прроверять кто он..


HTTP cookies. Cookies это механизм хранения данных броузером удаленной машины для отслеживания или идентификации возвращающихся посетителей. Вы можете установить cookies при помощи функций setcookie() или setrawcookie(). Cookies являются частью HTTP-заголовка, поэтому setcookie() должна вызываться до любого вывода данных в броузер. Это то же самое ограничение, которое имеет функция header(). Вы можете использовать функции буферизации вывода, чтобы задержать вывод результатов работы скрипта до того момента, когда будет известно, понадобится ли установка cookies или других HTTP-заголовков.

Любые cookies, отправленные серверу броузером клиента, будут автоматически преобразованы в переменные PHP, подобно данным методов GET и POST. На этот процесс влияют конфигурационные директивы register_globals и variables_order . Для назначения нескольких значений одной cookie, просто добавьте [] к её имени.

В PHP 4.1.0 и выше, глобальный массив $_COOKIE всегда автоматически заполняется значениями полученных cookies. В более ранних версиях определяется массив $HTTP_COOKIE_VARS но только когда включена директива track_vars. (Эта директива всегда включена начиная с PHP 4.0.3.)

Дополнительная информация, в том числе и об особенностях реализации броузеров, приведена в описании функций setcookie() и setrawcookie().

   
 
 автор: Spyder   (30.11.2006 в 14:28)   письмо автору
 
   для: moonfox   (30.11.2006 в 14:25)
 

Спасибо!
Я немного не так вас понял, я думал использовать cookie вместе с сессиями.
Тема закрыта

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования