Автор Тема: Авторизация, куки и жалобы 20% клиентов, о том, что нифига ничего не работает  (Прочитано 7754 раз)

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

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Я уже давно использую авторизацию вот такого принципа:

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

   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% пользователей с включенными кукисами ругаются, что не могут после успешной авторизации работать с сайтом, так как их опять выбрасывает на форму авторизации со словами о том, что вы не авторизованы.

Посмотрите пожалуйста приведенные коды. Все пролез, вроде все правильно. Но ведь работает через раз! Почему? Нутром чувствую, что что-то не так с записью или чтением кукисов
« Последнее редактирование: 13 Января 2005, 12:32:05 от Kwazar »
С уважением Сергей

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Kwazar
таскай сессию через параметры... и всё будет ок...
And no religion too...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Цитировать
commander:
таскай сессию через параметры... и всё будет ок...

правда такой вариант местами утомителен.
CGI::Auth
 в исканиях.

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
commander

Они не очень желательны.
С уважением Сергей

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Цитировать
правда такой вариант местами утомителен.

зато надёжный! и у всех работает... не зависимо от куки...
And no religion too...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Цитировать
Kwazar:
Нутром чувствую, что что-то не так с записью или чтением кукисов

ну используй тогда стандартные проверенные решения
CGI::Session или работай с ними через тот же CGI.pm
 в исканиях.

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
ИМХО, серверный вариант надежней. Нежели "клиентское разноообразие" куков (или кукисов, а как правильно?)
Все болезни от нервов, только сифилис от удовольствия

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Mog.
А что подразумевается под фразой: "серверный вариант"?
Базовая авторизация?

Тогда сразу 2 вопроса:
1)Как ее повесить на БД и не хранить пользователей в .htpasswd?
2)Как выводить скрипты, которые только проверяют, авторизован клиент или нет? (например, общие описаловки с различными меню для авторизованных и не авторизованных пользователей)?
С уважением Сергей

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
Kwazar
Сессии.
Хотя не поручусь за модули, че они там используют.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Цитировать
Mog.:
ИМХО, серверный вариант надежней

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

или что-то еще?
 в исканиях.

Оффлайн Mog.

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 828
  • +0/-0
  • 0
    • Просмотр профиля
Green Kakadu
Я про вообще.
Все болезни от нервов, только сифилис от удовольствия

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
В процессе размышлений родилось решение передавать сессию пользователя через get, используя Mod_rewrite для большей читабельности поисковиками. Жаль, конечно, что сессию не спрячешь в этом варианте решения и не сделаешь постоянной (без новой авторизации при повторном посещении сайта)
С уважением Сергей

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Цитировать
Kwazar:
get, используя Mod_rewrite для большей читабельности поисковиками.

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

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Green Kakadu
Есть еще и общие скрипты, которые только проверяют, авторизован клиент или нет (и в зависимости от этого выводят или не выводят личное меню). Но при этом эти же скрипты доступны и для остальных.
С уважением Сергей

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Kwazar
о чем вообще тут полемику разводить? сессию можно либо таскать параметрами, либо хранить в куках, если куки не устраивают, остаеться только таскать сессию параметрами... и баста.
And no religion too...

 

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