Forum Webscript.Ru

Программирование => Perl => Тема начата: Kwazar от 13 Января 2005, 12:01:52

Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Kwazar от 13 Января 2005, 12:01:52
Я уже давно использую авторизацию вот такого принципа:

При успешной проверке логин а пароля пользователю пишутся куки с логином пользователи и его сессией

   print "Set-Cookie: id=$id; expires=.date()+3600*24*100; path=/;\\n";
   print "Set-Cookie: sess=$sess;  expires=.date()+3600*24*100; path=/;\\n";

И в дальнейшем, при каждом обращении к пользовательской части сайта я вытягиваю эти куки с сверяю их с теми, что записаны в БД

   $cookhttp= $ENV{\'HTTP_COOKIE\'} || $ENV{\'COOKIE\'};
   @cookies = split (/\\; /,$cookhttp);
   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;
      $C{$n} = $value;
   }
#$C{id} - id пользователя
#$C{sess} - сессия пользователя

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

Посмотрите пожалуйста приведенные коды. Все пролез, вроде все правильно. Но ведь работает через раз! Почему? Нутром чувствую, что что-то не так с записью или чтением кукисов
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: commander от 13 Января 2005, 12:35:57
Kwazar
таскай сессию через параметры... и всё будет ок...
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Green Kakadu от 13 Января 2005, 12:42:06
Цитировать
commander:
таскай сессию через параметры... и всё будет ок...

правда такой вариант местами утомителен.
CGI::Auth (http://search.cpan.org/author/CCWALLACE/CGI-Auth-3.00/Auth.pm)
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Kwazar от 13 Января 2005, 12:47:02
commander

Они не очень желательны.
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: commander от 13 Января 2005, 12:49:51
Цитировать
правда такой вариант местами утомителен.

зато надёжный! и у всех работает... не зависимо от куки...
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Green Kakadu от 13 Января 2005, 12:50:07
Цитировать
Kwazar:
Нутром чувствую, что что-то не так с записью или чтением кукисов

ну используй тогда стандартные проверенные решения
CGI::Session или работай с ними через тот же CGI.pm
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Mog. от 13 Января 2005, 15:55:49
ИМХО, серверный вариант надежней. Нежели "клиентское разноообразие" куков (или кукисов, а как правильно?)
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Kwazar от 13 Января 2005, 16:06:03
Mog.
А что подразумевается под фразой: "серверный вариант"?
Базовая авторизация?

Тогда сразу 2 вопроса:
1)Как ее повесить на БД и не хранить пользователей в .htpasswd?
2)Как выводить скрипты, которые только проверяют, авторизован клиент или нет? (например, общие описаловки с различными меню для авторизованных и не авторизованных пользователей)?
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Mog. от 13 Января 2005, 16:11:12
Kwazar
Сессии.
Хотя не поручусь за модули, че они там используют.
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Green Kakadu от 13 Января 2005, 16:11:29
Цитировать
Mog.:
ИМХО, серверный вариант надежней

ты про
my $login=$ENV{\'REMOTE_USER\'};

или что-то еще?
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Mog. от 13 Января 2005, 16:18:22
Green Kakadu
Я про вообще.
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Kwazar от 13 Января 2005, 16:49:40
В процессе размышлений родилось решение передавать сессию пользователя через get, используя Mod_rewrite для большей читабельности поисковиками. Жаль, конечно, что сессию не спрячешь в этом варианте решения и не сделаешь постоянной (без новой авторизации при повторном посещении сайта)
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Green Kakadu от 13 Января 2005, 17:09:52
Цитировать
Kwazar:
get, используя Mod_rewrite для большей читабельности поисковиками.

а при чем тут поисковики, если раздел _для авторизованных пользователей_
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Kwazar от 13 Января 2005, 17:16:09
Green Kakadu
Есть еще и общие скрипты, которые только проверяют, авторизован клиент или нет (и в зависимости от этого выводят или не выводят личное меню). Но при этом эти же скрипты доступны и для остальных.
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: commander от 13 Января 2005, 17:26:07
Kwazar
о чем вообще тут полемику разводить? сессию можно либо таскать параметрами, либо хранить в куках, если куки не устраивают, остаеться только таскать сессию параметрами... и баста.
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Макс от 13 Января 2005, 17:35:46
Цитировать
Kwazar:
В процессе размышлений родилось решение передавать сессию пользователя через get, используя Mod_rewrite для большей читабельности поисковиками.

вобще-то желательно писать так, чтобы поисковик вообще не получал идентификатор сессии. Иначе все юзеры, которые зайдут к тебе через поисковик будут работать под одной сессией (если скриптом не предусмотреть это)
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: 2NetFly от 15 Января 2005, 00:21:46
Не читал всю тему, но может проблема в том, что плюшки поставленные для domen.com не работают для http://www.domen.com?
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: ondr от 15 Января 2005, 07:47:24
Цитировать
Kwazar:
print "Set-Cookie: id=$id; expires=.date()+3600*24*100; path=/;\\n";print "Set-Cookie: sess=$sess; expires=.date()+3600*24*100; path=/;\\n";


1. параметер expires указан неверно
2. при установке expires также полезно в заголовке высылать параметер Date, чтобы броузеру было от чего отчитывать

Рекомендация: при явном нежелании вникать в http протокол, рекомендую всё же воспользоваться готовым софтом для работы с заголовками а не пытаться сделать это самому
Название: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает
Отправлено: Phoinix от 15 Января 2005, 13:50:17
Kwazar
А я еще прописываю домен.
Так как у меня на некоторых сайтах ссылки относительные, поэтому сайт прекрасно работает как под доменом mysite.ru так и под доменом http://www.mysite.ru. поэтому во время авторизации я прописываю куки для обоих доменов одновременно.

Потом expires я всегда указываю максимальный, ты же сессию прописываешь, зачем тепе время её жизни у пользователя... определяй её время жизни на сервере. А то что у пользователя она пожизненная - неимеет значения.