Автор Тема: Авторизация. Часть 2.  (Прочитано 2268 раз)

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

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Авторизация. Часть 2.
« : 06 Марта 2003, 21:04:30 »
Нужна небольшая помощь или совет.
Я уже выкладывал скриптик для авторизации пользователей с использованием кукей. Так вот, клиент говорит, что его выкидывает через раз, хотя у меня всегода нормально отрабатыват. Если вам не сложно посмотрите, у вас такие глюки обнаруженны будут или нет?
ссылка с его использованием:
http://www.plazma.ru/cgi-bin/gb/gb.cgi
Сам скрипт:
sub aut {
########получаем куки
@cookies = split (/\\; /,$ENV{HTTP_COOKIE});
foreach $cookies (@cookies)
{
   ($n, $value) = split(/=/, $cookies);
   $n =~ tr/+/ /;
   $n =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $COOK{$n} = $value;
}

# Есть какие-то данные, сверяем их, если пользователь не авторизуется
if ($COOK{login} ne \'\' && $COOK{sess} ne \'\' && $act ne "login")
{
   $login="$COOK{login}";
   $sess="$COOK{sess}";
   &sess;

}

# Пользователь не авторизован вообще и не авторизуется в данный момент
if (($COOK{login} eq \'\' || $COOK{sess} eq \'\') && $act  ne "login")
{
   &form_login;
   exit;
}
# Пользователь авторизуется
if ($act eq "login")
{

   &login;
$act="";
}
}
sub login
{

   $sth = $dbh->prepare("select id,status from $users_table WHERE login = \'$login\' and pass = \'$pass\'");
   $sth->execute || die $dbh->errstr;
   @rez=$sth->fetchrow;
   ### Логин или пароль не верны!
   $stat="$rez[1]";
   if ($stat eq \'\')
   {
      print "Content-type:text/html\\n\\n";
      &form_login;
      exit;
   }
   # Пользователь авторизован
   if ($stat ne \'\')
   {
      &wr_cookes;
      $user_login="$login";

   }

}
### Генерируем и пишем данные пользователя в куки и заносим их в базу
sub wr_cookes
{
   $sess=rand(32);
   print "Set-Cookie: login=$login; expires=+2M; path=/;\\n";
   print "Set-Cookie: sess=$sess; expires=+2M; path=/;\\n";
   $sth = $dbh->prepare("update $users_table set sess=\'$sess\' where login=\'$login\'");
   $sth->execute || die $dbh->errstr;                                                    
   $sth->finish;
}
sub sess
{

   $sth = $dbh->prepare("select sess from $users_table WHERE login = \'$login\'");
   $sth->execute || die $dbh->errstr;
   $ss=$sth->fetchrow;
   $sth->finish;

   $sth = $dbh->prepare("select id,status,sess from $users_table WHERE login = \'$login\' and sess = \'$sess\'");
   $sth->execute || die $dbh->errstr;
   @rez=$sth->fetchrow;
   $sth->finish;

   $stat="$rez[1]";
   ### Логин или пароль не верны!
   if ($stat eq \'\')
   {
      &form_login;
      exit;
   }
   # Пользователь авторизован
   if ($stat ne \'\')
   {
      $user_login="$login";
   }

}
1;


Я сделал вывод сессии на странице, пока будет тестирование. буду благодарен. если вы наужете и укажите ошибки или дырки в данном скрипте или самом алгоритме. Спасибо
С уважением Сергей

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Авторизация. Часть 2.
« Ответ #1 : 06 Марта 2003, 21:13:22 »
Кстати можите не ригистрироватся, я сделал тестовый вход
Логин - test
Пароль - test
С уважением Сергей

 

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