Автор Тема: Извечная проблема. Кукисы...  (Прочитано 7111 раз)

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

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Извечная проблема. Кукисы...
« : 23 Марта 2006, 14:50:41 »
Пишем элементарный код:

my $sid="qwejqhwjkhqjkuausdhahd";
print "Set-Cookie: sid=$sid; expires=+7d;\\n";
print "Content-type: text/html\\n\\n";

Вопрос в том, а почему не хочет ставиться кука?

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Извечная проблема. Кукисы...
« Ответ #1 : 23 Марта 2006, 15:10:46 »
print "Set-Cookie: sid=$sid; expires=+7d;\\n";
а формат для expires???

 +7d - это вы избалованы модулем CGI.
Ворота в perl - perlmonks.org.ru

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Извечная проблема. Кукисы...
« Ответ #2 : 23 Марта 2006, 15:13:00 »
Дык ему точную дату удаления кукисов надо???
А какой формат, если не секрет?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Извечная проблема. Кукисы...
« Ответ #3 : 23 Марта 2006, 15:37:22 »
rfc 2616

# perl -MCGI::Cookie -e \'print new CGI::Cookie(-name=>"ID",-value=>123456,-expires =>  "+3M")\'
ID=123456; path=/; expires=Wed, 21-Jun-2006 12:36:50 GMT
#

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Извечная проблема. Кукисы...
« Ответ #4 : 23 Марта 2006, 15:42:59 »
Так, взял скрипт из примера и немного его переделал:

sub place_cookie {
my ($income_sid) = @_;
#Количество секунд в 30-ти днях
my $d=2592000;
#Английские трехбуквенные обозначения
#дней недели и месяцев
my @weekdays=(\'Sun\',\'Mon\',\'Tue\',\'Wed\',\'Thu\',\'Fri\',\'Sat\');
my @months=(\'Jan\',\'Feb\',\'Mar\',\'Apr\',\'May\',\'Jun\',\'Jul\',\'Aug\',\'Sep\',\'Oct\',\'Nov\',\'Dec\');
my $t=time;
$t+=$d;
#Получаем значение конечных даты и времени в "обычном" виде
my ($SS,$MM,$HH,$DD,$MON,$YY,$WD);
($SS,$MM,$HH,$DD,$MON,$YY,$WD)=gmtime($t);
$YY=$YY+1900;
my $exp_date="$weekdays[$WD], $DD-$months[$MON]-$YY $HH:$MM:$SS GMT";
#Вставляем \'0\' перед числами <10, если они есть
my $z=\'0\';
$exp_date=~s/(\\D)(\\d{1})(\\D)/$1$z$2$3/g;
#my $cookie="sid=$income_sid\\; path=/\\; expires=$exp_date\\;";
my $cookie="sid=$income_sid\\; expires=$exp_date\\;";
print "Content-Type: text/html\\n";
print "Set-Cookie: $cookie\\n\\n";
                 }

И всё равно не работает...
Вызываю как:
place_cookie($sid);

Пробовал посмотреть через print. $income_sid и $exp_date выводяться отлично. Так почему не ставяться куки?

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Извечная проблема. Кукисы...
« Ответ #5 : 23 Марта 2006, 16:51:02 »
# perldoc -m CGI::Util | grep -B0 -A19 "^sub expires"
sub expires {
    my($time,$format) = @_;
    $format ||= \'http\';

    my(@MON)=qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/;
    my(@WDAY) = qw/Sun Mon Tue Wed Thu Fri Sat/;

    # pass through preformatted dates for the sake of expire_calc()
    $time = expire_calc($time);
    return $time unless $time =~ /^\\d+$/;

    # make HTTP/cookie date string from GMT\'ed time
    # (cookies use \'-\' as date separator, HTTP uses \' \')
    my($sc) = \' \';
    $sc = \'-\' if $format eq "cookie";
    my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime($time);
    $year += 1900;
    return sprintf("%s, %02d$sc%s$sc%04d %02d:%02d:%02d GMT",
                   $WDAY[$wday],$mday,$MON[$mon],$year,$hour,$min,$sec);
}

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Извечная проблема. Кукисы...
« Ответ #6 : 23 Марта 2006, 17:44:07 »
А чем мой пример плох?

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Извечная проблема. Кукисы...
« Ответ #7 : 23 Марта 2006, 18:01:11 »
Тем что не работает.
А вообще для того чтобы нормально работать с форматом, нужно использовать две функции:
sub expires - о которой написал arto
и
sub expire_calc {
    my($time) = @_;
    my(%mult) = (\'s\'=>1,
                 \'m\'=>60,
                 \'h\'=>60*60,
                 \'d\'=>60*60*24,
                 \'M\'=>60*60*24*30,
                 \'y\'=>60*60*24*365);
    # format for time can be in any of the forms...
    # "now" -- expire immediately
    # "+180s" -- in 180 seconds
    # "+2m" -- in 2 minutes
    # "+12h" -- in 12 hours
    # "+1d"  -- in 1 day
    # "+3M"  -- in 3 months
    # "+2y"  -- in 2 years
    # "-3m"  -- 3 minutes ago(!)
    # If you don\'t supply one of these forms, we assume you are
    # specifying the date yourself
    my($offset);
    if (!$time || (lc($time) eq \'now\')) {
        $offset = 0;
    } elsif ($time=~/^\\d+/) {
        return $time;
    } elsif ($time=~/^([+-]?(?:\\d+|\\d*\\.\\d*))([mhdMy]?)/) {
        $offset = ($mult{$2} || 1)*$1;
    } else {
        return $time;
    }
    return (time+$offset);
}

которая вызывается из expires
и работать с ними так:
my $format=expires("+1d");
Ворота в perl - perlmonks.org.ru

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Извечная проблема. Кукисы...
« Ответ #8 : 23 Марта 2006, 18:21:43 »
Тобишь, если я подставлю дату, которую возвращает expires в подпрограмму:

sub place_cookie {
my $exp_date = expires("+30d");
my $cookie="sid=$income_sid\\; expires=$exp_date\\;";
print "Content-Type: text/html\\n";
print "Set-Cookie: $cookie\\n\\n";
}

Кука поставиться... Во блин изврат :-)
Пошёл пробовать...

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Извечная проблема. Кукисы...
« Ответ #9 : 23 Марта 2006, 18:27:09 »
Yahoooo РАБОТАЕТ!!! :-)
Всем большое спасибо.

А обьясните мне, я так понимаю, моя подпрограмма составляла время в неправильном формате? Или из-за чего ошибка?

Оффлайн Алан

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 31
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alanrin.com
Извечная проблема. Кукисы...
« Ответ #10 : 27 Марта 2006, 14:08:57 »
угу... время нужно в другом формате ставить...

 

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