Автор Тема: Аутентификация  (Прочитано 8487 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« : 09 Июля 2002, 13:29:24 »
Привет всем.
Помогите пожалуйста разобраться с аутентификацией на пхп.
Вот как я это понимаю, поправьте пожалуйста, если не прав.

Если пришли переменные $HTTP_POST_VARS[\'username\'] && $HTTP_POST_VARS[\'password\'], значит пользователь ввёл их из формы и их нужно проверить.
Проверяю.
Если ОК, открываю сессию и регистрирую переменные $username и $password.
Если не ОК - снова выдаю форму для логина.

Если пришли переменные $username и $password установлены (вот этот момент мне не нравиться, по-моему не правильно), то значит сессия уже была открыта и снова проверяю значения $username и $password. Если ОК - пользователь внутри и может дальше работать, если не ОК - error message.

Теперь вопрос. Можно ли, вместо того, чтобы проверять каждый раз, верны ли $username и $password (для этого их их файла считывать нужно), услановить какую-нибудь переменную $OK, и потом каждый раз проверять, установлена ли она.
Но ведь пользователь может сам послать эту переменную скрипту, тогда нужно различать, какая это переменная,  пришла ли она из броузера или это переменная, связанная с sessionID. Как это сделать.
Большое спасибо.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Аутентификация
« Ответ #1 : 09 Июля 2002, 13:55:16 »
делаешь session_start, потом sesson_register(\'username\') и sesson_register(\'password\') и сверяешь их с правильными каждый раз. По моему так.
А насчет HTTP_POST_VARS.... их можно и подменить.
По моему лучше проверять getenv(\'HTTP_REFERER\')
« Последнее редактирование: 09 Июля 2002, 14:01:25 от Alexandr »
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #2 : 09 Июля 2002, 14:27:17 »
Цитировать
делаешь session_start, потом sesson_register(\'username\') и sesson_register(\'password\') и сверяешь их с правильными каждый раз. По моему так.

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

Оффлайн Fury

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 64
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #3 : 09 Июля 2002, 16:18:52 »
session_start();
session_register("ok");   -  при первой проверке.
А потом в каждом последующем скрипте сначала
unset($ok);
а потом уже
session_start();
и проверять на установленность $_SESSION["ok"]
Рыжая бестия

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Аутентификация
« Ответ #4 : 09 Июля 2002, 16:43:52 »
Цитировать
Если пришли переменные $username и $password установлены (вот этот момент мне не нравиться, по-моему не правильно), то значит сессия уже была открыта и снова проверяю значения $username и $password

Если $HTTP_SESSION_VARS[\'login\'] существует, то делаешь проверку $HTTP_SESSION_VARS[\'login\'] и $HTTP_SESSION_VARS[\'password\'], иначе выдаешь форму для аутентификации.
Цитировать
$OK, и потом каждый раз проверять, установлена ли она.

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

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #5 : 09 Июля 2002, 17:13:26 »
Цитировать
Нет, лучше каждый раз проверяй логин а пароль.

Почему? Разве возможно подделать переменную $HTTP_SESSION_VARS[\'OK\'] ?

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #6 : 09 Июля 2002, 17:52:47 »
И ещё одна проблема:
Вот упрощённый код моего скрипта с аутентификацией (index.php):

<HTML>
<
HEAD>
<
TITLE>db edit</TITLE>
</
HEAD>
<
BODY leftMargin="0" topMargin="0" marginheight="0" marginwidth="0">
<
BR>
<
center>

<?
function 
authenticate($username,$password)
{  
$ok=false;
   if (
$username=="Piece" && $password=="Cake")
   {   
$ok=true;
   }
   return 
$ok;
}

if (
$HTTP_POST_VARS[\'username\'] && $HTTP_POST_VARS[\'password\'])
{  $username=$HTTP_POST_VARS[\'username\'];
   $password=$HTTP_POST_VARS[\'password\'];
   if (authenticate($username,$password))
   {  session_start();
      $authenticated=true;
      session_register("username");
      print "Welcome $username!";
   }
   else print "<BR>Error authenticate<BR>";
}
else if ($HTTP_SESSION_VARS[\'username\'])
{  print "<BR>Hello, $username!";
   $authenticated=true;
}

if (!$authenticated)
{  print "<FORM action=\\"http://$SERVER_NAME$SCRIPT_NAME\\" method=POST>";
// ...
// Форма для ввода имени и пароля.
// ...
   print "</FORM>";
}                                                        
?>

<BR><BR>
<a href="./index.php">This script</a>
<BR>
<a href="./index2.php">Another script</a>
</center>
</BODY>
</HTML>


А вот то, что я не пойму:
При первом запуске скрипта сессия ещё не создаётся (видно из кода), сответственно куки с её номером  не установлены, а пхп всё равно добавляет переменную PHPSESSID в url последних двух ссылок. Вот так это выглядит при просмотре кода в браузере:

...
<
BR>
<
a href="./index.php?PHPSESSID=...">This script</a>
<
BR>
<
a href="./index2.php?PHPSESSID=...">Another script</a>
...


Почему так, ведь сессия ещё не запущена?
« Последнее редактирование: 10 Июля 2002, 11:58:46 от Evgeny »

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Аутентификация
« Ответ #7 : 09 Июля 2002, 18:26:14 »
Цитировать
$password="Cake")

Это присваивание.
Цитировать
Почему так, ведь сессия ещё не запущена?

Сессия запущена, только данные тебе пока в ней не видны.
PHP самостоятельно дописывает имя и id сессии к ссылке, иначе как сессия будет передаваться через страницы?
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #8 : 10 Июля 2002, 12:03:00 »
Цитировать

Цитировать

$password="Cake")

Это присваивание.

Ошибся, сейчас поправлю.

Цитировать
Сессия запущена, только данные тебе пока в ней не видны.
PHP самостоятельно дописывает имя и id сессии к ссылке, иначе как сессия будет передаваться через страницы?

Так почему же она запущена? Ведь судя по коду она должна запускаться в том случае, если пользователь ввёл правильные имя и пароль.
Или сессия запускается всегда, если в коде скрипта есть вызов
session_start() ?

Оффлайн Fury

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 64
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #9 : 10 Июля 2002, 14:22:48 »
Цитировать
Или сессия запускается всегда, если в коде скрипта есть вызов
session_start() ?


Да.
Но переменные какие-то станут в ней храниться только после их session_register("var")
Рыжая бестия

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #10 : 11 Июля 2002, 19:34:06 »
Цитировать
Да.
Но переменные какие-то станут в ней храниться только после их session_register("var")

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

Оффлайн Evgeny

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 272
  • +0/-0
  • 0
    • Просмотр профиля
Аутентификация
« Ответ #11 : 11 Июля 2002, 19:34:45 »
А зачем так сделано? Почему нельзя взависимости от логики либо открывать её, либо нет? С этим связаны какие-то проблемы?

Оффлайн advocat

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 73
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.php.net.ua
Аутентификация
« Ответ #12 : 15 Июля 2002, 15:59:27 »
Дам один совет, в нащале файла просто открой сессию тобишь пропиши
  session_start();
и не делай все через задницу, я те скажу проще, у меня сделана авторизация, но с использованием бд, и намного проще каждый раз проверять с дб, чем мучится с регистрацией левой сессии, тем более нужна ли она ???

А еще я тебе посоветую научится работать с куками ! Кому приятно каждый раз авторизироваться ??? проще загнать в куки инфу и если она там есть и правильная, то авторизацию не запрашивать если нет, то авторизацию.
Еще совет, не кидай в куки открытый пассворд, лучше воспользуйся чем-то типа md5() ...
заходите в гости
адвокат, это не профессия, это диагноз ! [ обитаю в PHP ]

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Аутентификация
« Ответ #13 : 15 Июля 2002, 17:31:29 »
Адвокат дело говорит. Вначале.
Про куки - полный бред. Никакие пароли, ни зашифрованные, ни открытые в куки не клади. Только признак авторизованности, если сам юзер захочет и если уровень безопасности позволяет.

А про авторизацию - верно.
во всех скриптах пишется такой код

session_start
();
if (!
$HTTP_SESSION_VARS[\'username\']) {
header("Location: register.php");
exit;
}


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

if ($HTTP_POST_VARS[\'submit\']) {
  $username=$HTTP_POST_VARS[\'username\'];
  $password=$HTTP_POST_VARS[\'password\'];
  // проверяем имя и пароль, причем безо всякой функции.
   if (пароль прошел)
   {  session_register("username");
      print "Welcome $username!";
   }
   else print "<BR>Error authenticate<BR>";
}
выводим форму запроса имени и пароля.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Аутентификация
« Ответ #14 : 15 Июля 2002, 17:34:08 »
advocat
так у тебя авторизация с сессиями и еще и в базу лезешь при каждом обращении?
А можно поинтересоваться - зачем?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28