Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Проблема с Кукисами.


Автор: Vbif 4.9.2005, 05:36
Есть подпроцедура достающая значение из предварительно созданного кукиса.
Код

sub Get_Cookie {
%Info = fetch CGI::Cookie;
$id = $Info{"Session"}->value;
                 }

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

Пробовал, вот так:

Код

sub Check_Cookie {
%Info = fetch CGI::Cookie;
$id = $Info{"Session"}->value;

  if (defined($if))

      {
             return $id;
                               }

  else

      {
             die; &Redirect;
                                       }

                                                 }


Но, не работает smile

Заранее всех благодарю.


Автор: Vbif 4.9.2005, 05:38
Упс, извиняюсь, не до конца разобрался с кнопочкой КОД smile

Автор: sharq 4.9.2005, 10:08
Vbif на самом деле, ты все правильно делал, только убери die перед вызовом подпрограммы. smile
Но я сделал бы так:
Код

sub Check_Cookie {
  ...
  return ( defined $id ? $id : 0);
}


И затем в программе, где вызывается эта функция:
Код

my $get_id = Check_Cookie() || Check_Param() || undef;

где Check_Param() - функция проверки параметров переданных программе (если кукисы отключены).
или
Код

my $get_id = Check_Cookie();
if (defined $get_id) {
  My_Header();
  My_Print("You have cookie: $get_id");
} else {
  Redirect();
}


smile

Автор: Vbif 4.9.2005, 17:53
Сенкс, почти заработало, но писало в логи

Can't call method "value" on an undefined value at

Что решилось довольно банально

Код

$id = $Info{"Session"}->value if defined(%Info);

Автор: sharq 4.9.2005, 19:48
Vbif
Цитата(Vbif @ 4.9.2005, 18:53)
Can't call method "value" on an undefined value at

Что решилось довольно банально

$id = $Info{"Session"}->value if defined(%Info);

Это не всегда сработает, лучше:
Код

$id = $Info{"Session"}->value if %Info && defined $Info{"Session"};


smile

Автор: sharq 4.9.2005, 20:05

И это тоже не спасет. smile
Если у $Info{"Session"} метода нет, то будет ошибка.

Если ты хочешь max избежать ошибки, то

Код

my %Info = fetch CGI::Cookie;
my $sess = $Info{"Session"} if exists $Info{"Session"} ;
# ты знаешь, что если $sess - сужествует, то это по любому ссылка на объект, 
# у кот есть метод value, поэтому проверяй существование $sess
my $id = $sess->value() if defined $sess;


smile

Автор: Vbif 5.9.2005, 01:46
Снимаю шляпу smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)