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


Автор: zorch 19.3.2006, 20:59
сделал тестовую прогу
Код

#!/usr/bin/perl
use CGI;
$hash=true_rand(); # Функция рандома, писал сам
$flogin="zorch";
#Устанавливаем куку
my $query = CGI->new;
print $query->header(-cookie => $query->cookie(-name => $flogin,-value => $hash,-expires =>  '+3M'));

При этом кука появляется, все нормально работает.
Вставляю в большую свою программу которую пишу, в виде функции:
Код

sub cook
{
                        $hash=true_rand();
                        $dbh = DBI->connect("DBI:mysql:XXXXXXXXX", "XXXX", "XXX");
                        $sth = $dbh->prepare("UPDATE users SET `ip`='$ip',`hash`='$hash' WHERE login = \"$flogin\" ");
                        $sth->execute();
                        $dbh->disconnect;
                        my $query = CGI->new;
                        print $query->header(-cookie => $query->cookie(-name => $flogin,-value => $hash,-expires =>  '+3M'));
}

В базу все кладется. А вот кука не появляется! Где грабли?

Автор: BlackLFL 19.3.2006, 21:09
Цитата(zorch @ 19.3.2006, 21:59 Найти цитируемый пост)
Вставляю в большую свою программу которую пишу, в виде функции:

теневые послыки должны выставляться перед заголовком типа документа, проверьте скрипт, нет у Вас вызова ранее, например:
Код

print $q->header('text/html');

Автор: zorch 19.3.2006, 21:23
Нет. Ничего таког нет.
Забыл уточнить, в логах все чисто, и при выполнении sub cook на экране появляется строка типа
Код
Set-Cookie: name=value; path=/; expires=Sat, 17-Jun-2006 17:46:53 GMT Date: Sun, 19 Mar 2006 17:46:53 GMT Content-Type: text/html; charset=ISO-8859-1

Автор: BlackLFL 19.3.2006, 21:31
Цитата(zorch @ 19.3.2006, 22:23 Найти цитируемый пост)
и при выполнении sub cook на экране появляется строка типа

это говорит о том, что Ваша программа уже отдала заголовок! ищите внимательнее ...
Добавлено @ 21:36
вариант с "ошибкой", т.к. заголовок уже отдан на 7 строчке
Код

#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser); # For debuging
use CGI;

print "Content-type: text/html\n\n";

sub cook {
    my $query = CGI->new;
    print $query->header(-cookie => $query->cookie(-name => 'login',-value => 'Black',-expires =>  '+3M'));
}

&cook;
1;

выведет на экран
Цитата

Set-Cookie: login=Black; path=/; expires=Sat, 17-Jun-2006 18:37:38 GMT Date: Sun, 19 Mar 2006 18:37:38 GMT Content-Type: text/html; charset=ISO-8859-1

Автор: zorch 21.3.2006, 13:50
Да спасибо. Заголовок отдавался раньше.

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