Нужна небольшая помощь или совет.
Я уже выкладывал скриптик для авторизации пользователей с использованием кукей. Так вот, клиент говорит, что его выкидывает через раз, хотя у меня всегода нормально отрабатыват. Если вам не сложно посмотрите, у вас такие глюки обнаруженны будут или нет?
ссылка с его использованием:
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;
Я сделал вывод сессии на странице, пока будет тестирование. буду благодарен. если вы наужете и укажите ошибки или дырки в данном скрипте или самом алгоритме. Спасибо