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

Форум PHP

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

 

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

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

тема: авторизация АДМИНА.
 
 автор: 10100100   (27.10.2005 в 15:45)   письмо автору
 
 

Сразу прошу Хеопс, не надо кучу ссылок давать :)) мнеб одну но конкртно по данной теме...

В общем есть вот такой вот код, вся инфа соответственно храница в БД...


<?php

$pass
=md5($pass);
include (
"config.php");

$query "SELECT pass FROM user WHERE name='".$name."'"
$query2 "UPDATE user SET last_time = NOW() WHERE name = '".$name."'";
mysql_query($query2);
    
$nme mysql_query($query); 
    if(!
$nme
    { 
      echo 
"Ошибка выполнения запроса"
      exit(); 
    } 


if(
mysql_num_rows($nme) > 0
    { 

       
$passw mysql_result($nme,0); 

       if (
$pass == $passw) {setcookie("valid_user"$nametime()+604800);
header("Location:index.php");
exit; }
       else 
       { 
         echo 
"Ошибка идентификации: неправильный пароль"
         exit(); 
       } 
    } 
    else 
    { 
      echo 
"Пользователь с таким именем не найден!<br>Вы можете зарегистрироваться <a href=members/registration.php>здесь</a>"
      exit(); 
    } 

?>



я тут запутался жутко, мне нужно чтобы код распознавал Админа от простого пользователя, за счёт того что Админ является юзером с ID 1! тоесть нужн окаким то макаром сравнивать ID видимо и занасить в соответствии с этим в куки разные данные

   
 
 автор: Axxil   (27.10.2005 в 17:54)   письмо автору
 
   для: 10100100   (27.10.2005 в 15:45)
 

Я бы так сделал:
После ввода в форму логина и пароля имеем две переменные типа POST
$log=$_POST['login'] и $pass=$POST['pass']

<?
  $sql
="select id from user where pass='".$pass."' and name='".$log."'";
  
$query=mysql_query($sql);
  
$res=mysql_fetch_assoc($query);
  if(empty(
$res)) echo "А ты кто такой?";
  else 
setcookie("pass"$passtime()+604800);
?>

Вот... Теперь мы имеем в Куке пароль. А так как вы вводили логин/пароль админа, то и у вас на компе сохранится пароль именно админа. Соответственно далее в скрипте можно легко и элегантно вытащить его ID
<?
  
if(!empty($_COOKIE)){
    
$pass=$_COOKIE['pass'];
    
$sql="select id from user where pass='".$pass."'";
    
$query=mysql_query($sql);
    
$res=mysql_fetch_assoc($query);
    
$ID=$res['id'];
  }else{
  
// подсовываеи страницу ввода логина/пароля 
  
}
  
// Ну и далее понятно:
  
if($ID==1) echo "Здравствуйте, ваше сиятельство!!!";
  else echo 
"Здорово, челядь!";
?>

   
 
 автор: 10100100   (27.10.2005 в 18:29)   письмо автору
 
   для: Axxil   (27.10.2005 в 17:54)
 

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

   
 
 автор: axxil   (28.10.2005 в 00:08)   письмо автору
 
   для: 10100100   (27.10.2005 в 18:29)
 

разумно...
тогда можно так:

<? 
  
if(!empty($_COOKIE)){ 
    
$pass=$_COOKIE['pass']; 
    
$sql="select id from user where pass='".$pass."'"
    
$query=mysql_query($sql); 
    
$res=mysql_fetch_assoc($query); 
    
$ID=$res['id']; 
  }else{ 
  
// подсовываеи страницу ввода логина/пароля 
    
$ID=0;
  } 
  
// Ну и далее понятно: 
  
if($ID==1) echo "Здравствуйте, ваше сиятельство!!!"
  elseif(
$ID==0) echo "добро пожаловать, гость";
  else echo 
"Здорово, челядь!"
?> 

   
 
 автор: 10100100   (28.10.2005 в 08:49)   письмо автору
 
   для: axxil   (28.10.2005 в 00:08)
 

о, точно - вполне разумно... хм..... отлично, спасибо, в процессе буду задавать вопросы :)

   
 
 автор: 10100100   (28.10.2005 в 09:19)   письмо автору
 
   для: axxil   (28.10.2005 в 00:08)
 

Этот код подходит только если у меня на сайте нет формочки регистрации гденить в угла, а у меня она есть :) так что нужно сделать чтобы этот код был только обработчиком... я вот тут немного переделал его под себя - знаю что накосячил, только вот не могу разобраться.... помогите пожалуйста.


<?php

$pass
=md5($pass);
include (
"config.php");

$query2 "UPDATE user SET last_time = NOW() WHERE name = '".$name."'";
mysql_query($query2);

  if(!empty(
$_COOKIE)){ 
    
$pass=$_COOKIE['pass']; 
    
$sql="select id_user from user where pass='".$pass."'"
    
$query=mysql_query($sql); 
    
$res=mysql_fetch_assoc($query); 
    
$ID=$res['id_user']; 
  }
  if(
$ID==1); setcookie("admin"$nametime()+604800);
  else 
setcookie("valid_user"$nametime()+604800);
?> 

   
 
 автор: Axxil   (28.10.2005 в 12:58)   письмо автору
 
   для: 10100100   (28.10.2005 в 09:19)
 

Ну так всё нормально... можно не подсовывать страницу регистрации... можно просто оставаться на нужной странице.
Мы получили ID пользователя... т.е мы его знаем, и теперь с помощью механизма сессий можно узнать этот ID в любой момент, на любой странице.

Если не знаете как и это вам интересно, спросите постараюсь объяснить

   
 
 автор: 10100100   (28.10.2005 в 13:34)   письмо автору
 
   для: Axxil   (28.10.2005 в 12:58)
 

так Вы то мне дали код для ситуации со всплывающей формой . а мне другой нужен, вот я и переделал а оно не работает..

   
 
 автор: lina   (28.10.2005 в 13:37)   письмо автору
 
   для: 10100100   (28.10.2005 в 13:34)
 

А почему авторизацию не сделать на сессиях и для пользователя, и для админа? Не понимаю...

   
 
 автор: 10100100   (28.10.2005 в 15:31)   письмо автору
 
   для: lina   (28.10.2005 в 13:37)
 

да сделать то можно, вопрос не в этом, а как оптличать админа от простого смертного...

   
 
 автор: cheops   (27.10.2005 в 20:09)   письмо автору
 
   для: 10100100   (27.10.2005 в 15:45)
 

>чтобы код распознавал Админа
В чём это должно проявляться?

   
 
 автор: 10100100   (28.10.2005 в 08:47)   письмо автору
 
   для: cheops   (27.10.2005 в 20:09)
 

проявляться это должно в иной записи в Куки, тоесть для админа создаётся другая запись - НЕ VALID_USER...

   
 
 автор: himic   (28.10.2005 в 12:10)   письмо автору
 
   для: 10100100   (28.10.2005 в 08:47)
 

а я ваще для админа отдельно всё сделал

   
 
 автор: cheops   (28.10.2005 в 13:22)   письмо автору
 
   для: 10100100   (28.10.2005 в 08:47)
 

Опасно - cookie на раз два подделать можно - у вас каждый второй админом будет.

   
 
 автор: 10100100   (28.10.2005 в 13:32)   письмо автору
 
   для: cheops   (28.10.2005 в 13:22)
 

Тоесть мне нужно будет сделать регистрацию на сессиях?
А как можно осуществить регистрацию для админа на сессиях а для пользователей на кукИ??? и чтобы при этом все данные (и админа и пользователей) вводились через одну и ту же форму???

   
 
 автор: lina   (28.10.2005 в 13:33)   письмо автору
 
   для: 10100100   (28.10.2005 в 13:32)
 

cheops Опасно - cookie на раз два подделать можно - у вас каждый второй админом будет.
А если, например хранить login зарегистрированного пользователя. А при загрузках страниц проверять валидность доступа данного пользователя к странице.

   
 
 автор: cheops   (28.10.2005 в 13:39)   письмо автору
 
   для: lina   (28.10.2005 в 13:33)
 

Если вы каждый раз будете запрашивать у него пароль, то ничего страшного, опасно когда в cookie пишется отличительный знак или аутентификация производится только по одному имени в cookie.

   
 
 автор: lina   (28.10.2005 в 13:49)   письмо автору
 
   для: cheops   (28.10.2005 в 13:39)
 

Да, в данном случае полностью согласна, т. к. пишется id, при чем для админа он всегда=1. Немного не правильный подход.

10100100:

А админ всегда один, их не может быть несколько?

   
 
 автор: cheops   (28.10.2005 в 13:37)   письмо автору
 
   для: 10100100   (28.10.2005 в 13:32)
 

Можно... у вас же админа всегда можно вычислить.

   
 
 автор: 10100100   (28.10.2005 в 15:36)   письмо автору
 
   для: cheops   (28.10.2005 в 13:37)
 

Дамы и господа, Вы вообще о чём? ))) чёт я запутался... :)

   
 
 автор: Axxil   (28.10.2005 в 15:34)   письмо автору
 
   для: 10100100   (28.10.2005 в 13:32)
 

Блин...
Надо разделять понятия куки и сессии. Куки нужны для первоначальной автоматической авторизации зпрегистрированного пользователя. Всё, дальше, когда пользователя сайт узнал куки нафиг больше не нужны. Дальше уже пишем в базу ID номер пользователя, будь-то админ, модератор или Папа римский, без разницы, а вместе с этим ID записываем PHPSESSION - уникальный идентификатор текущего сеанса, который тащится за пользователем со страницы на страницу, давая возможность сайту узнавать его.

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

   
 
 автор: 10100100   (28.10.2005 в 15:38)   письмо автору
 
   для: Axxil   (28.10.2005 в 15:34)
 

интересно - не то слово очень интересно, но на сколько мне известно при закрытии браузера - сессии дохнут..

   
 
 автор: lina   (28.10.2005 в 15:42)   письмо автору
 
   для: 10100100   (28.10.2005 в 15:38)
 

Во-первых, сессии можно сохранять.
Во-вторых, ну добавь ты в базу флаг для пользователя админ это или нет?

   
 
 автор: 10100100   (28.10.2005 в 16:04)   письмо автору
 
   для: lina   (28.10.2005 в 15:42)
 

о а это как? я ж пока что ломак в этом деле..

   
 
 автор: lina   (28.10.2005 в 17:09)   письмо автору
 
   для: 10100100   (28.10.2005 в 16:04)
 

Тут то же есть не мало проблем. ID сессии сохраняется в кукисах. Для того, чтобы сессия сохранилась и после закрытия браузера устанавливается время хранения кукисов:

# Период хранения куки в секундах. Значение 0 означает "пока браузер не будет закрыт"
      ini_set('session.cookie_lifetime',$n); //$n часов


Но при этом если кукисы выключены, возникают проблемы, сам понимаешь. ;-)

   
 
 автор: 10100100   (28.10.2005 в 17:21)   письмо автору
 
   для: lina   (28.10.2005 в 17:09)
 

хм.. так это я понял, но я даже не представляю себе как должен выглядеть код.... так... смутновато....

   
 
 автор: Loki   (28.10.2005 в 17:45)   письмо автору
 
   для: 10100100   (28.10.2005 в 16:04)
 

Моя гражданская позиция велит мне вас игнорировать, но я все же скажу: "я ж пока что ломак в этом деле" - никоим образом вас не оправдывает и, вместо того чтобы кянчить код в каждом сообщении, вы могли бы потратить час на изучение учебника (находящегося на этом же сайте), и пару часов на то чтобы сделать все те функции, которые вы уже неделю вымогаете у людей. Тем более что реализиция всего этого, требует от вас самых начальных знаний.
Все. Возвращаюсь к своей гражданской позиции:)

   
 
 автор: 10100100   (28.10.2005 в 18:06)   письмо автору
 
   для: Loki   (28.10.2005 в 17:45)
 

Локи - спасип! ток не ругайся... я не кляньчу код, просто я реально не врубаюсь... и в данный момент не имею достаточного колличества времени.... а если я допустим попробую снова сделать чтолибо сам и выложу сдесь Вы мне поможите?
просто я с этими СЕССИЯМИ теперь ещё окончательно запутался, с куками я всё понял но вот сессии...

   
 
 автор: cheops   (28.10.2005 в 19:01)   письмо автору
 
   для: 10100100   (28.10.2005 в 15:38)
 

>но на сколько мне
>известно при закрытии браузера - сессии дохнут..
Это от настроек сервера зависит - можно и так и эдак настроить.

   
 
 автор: 10100100   (28.10.2005 в 19:11)   письмо автору
 
   для: cheops   (28.10.2005 в 19:01)
 

Получается эту инфу пробивать у хостера надо?
а если у него настройки другие то что мне тогда делать?

   
 
 автор: cheops   (28.10.2005 в 23:57)   письмо автору
 
   для: 10100100   (28.10.2005 в 19:11)
 

Хм... а в смысле чего делать? Ведь режим работы сессий не является критичным...

   
 
 автор: 10100100   (29.10.2005 в 08:01)   письмо автору
 
   для: cheops   (28.10.2005 в 23:57)
 

это как?

   
 
 автор: Axxil   (29.10.2005 в 11:08)   письмо автору
 
   для: 10100100   (29.10.2005 в 08:01)
 

Сессионные войны. Часть 2.

Краткое содержание предыдущей серии:
Мы научились сохранять данные о пользователе на его собственном компьютере используя куки. Т.е при первом входе на сайт мы читаем куку пользователя, и если такая существует определяем по ней его ID.
Конец краткого содержания предыдущей серии



Для начала создадим библиотеку работы с сессиями session.php:

Создаём таблицу session в БД. В этой таблице создаём два поля

user_id | sess_id | crete_time


<?
function saveSession($user_id,$sid){
  
$sql='insert into session values('.$user_id.','\''.$sid.'\'')';
  mysql_query($sql);
}
function getUserBySessionId($sid){
  $sql='
select user_id from session where sess_id=\''.$sid.'\'';
  
$query=mysql_query($sql);
  
$r=mysql_fetch_assoc($query);
  if(!empty(
$r['user_id']))
    return 
$r['user_id'];
  else
   return  
0;
}
function 
clearSessions($hours){
  
// $hours - время жизни сессии в базе:
  
$sql='delete from session where create_time<DATE_SUB(NOW(),interval '.$HOURS.' HOUR)';
  
mysql_query(); 
}
?>


Далее в начале страницы до любого вывода в браузер пишем:

<?
require_once('session.php');
clearSession(1);
if(empty(
$_SERVER['PHPSESSION'])){
  
session_start();
  
$sid=session_id();
  
// функция извлечения ID из куки например getCockie() получаем $ID
  
if($ID>0saveSession($ID,$sid);
}else{
  
$ID=getUserBySessionId($_SERVER['PHPSESSION']);
}
?>

Если добавить этот код на любую страницу, мы будем знать ID юзера всегда.

   
Rambler's Top100
вверх

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