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


Автор: DigitSphinx 28.6.2010, 01:35
3й вопрос за неделю  smile  так уж получилось что на работе делать нечего вот и читаю перл ради интереса !
проблема с кукиз такая :
прочитал множество страниц инфы про куки и как сними работать, а у меня не работает и все ! вместо того чтобы создать куки браузер просто выводит мне строку в странице и все, куки включены во всех браузерах!
браузер = Opera, Mozilla Firefox, Google Chrome, Internet Explorer все дают один и тот же результат.
код такой (уже тупо скопированный из инета)

Код

use CGI qw(:standard);
$cookie = cookie(-name=>'key',-value=>'val',-expires=>'+1M');
print header(-cookie=>$cookie);
print start_html;
print h1("WELCOME");
print end_html;


@allCookies = cookie();
print header;
print start_html;
foreach $cookieName(@allCookies)
{
        print br;
        print "The value of the $cookieName is: ";
        print cookie($cookieName);
}
print end_html;


результат

Код

Set-Cookie: key=val; path=/; expires=Tue, 27-Jul-2010 22:34:24 GMT Date: Sun, 27 Jun 2010 22:34:24 GMT 
WELCOME
Content-Type: text/html; charset=ISO-8859-1

Автор: ginnie 28.6.2010, 13:28
DigitSphinx, раз у Вас Set-Cookie отображается в браузере, значит оно выводится не в заголовке, где должно бы, а в теле ответа. Возможно проблема связана с настройками web-сервера.

Автор: DigitSphinx 28.6.2010, 15:58
Цитата(ginnie @  28.6.2010,  13:28 Найти цитируемый пост)
Возможно проблема связана с настройками web-сервера.


вот содержимое html файла, на сколько я понял строка Set-Cookie не в блоке <head></head> а это плохо ?! )))

Код

Set-Cookie: key=val; path=/; expires=Wed, 28-Jul-2010 12:57:29 GMT
Date: Mon, 28 Jun 2010 12:57:29 GMT
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1>WELCOME</h1>
</body>
</html>Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

</body>
</html>

Автор: ginnie 28.6.2010, 16:12
DigitSphinx, три верхние строчки - поля заголовка, но у Вас они попадают в тело ответа. У Вас либо ошибка в скрипте, либо в настройках web-сервера. Попробуйте написать тестовый скрипт, в котором измените content-type и выведите строку:

Код

use CGI qw(:standard);
print header('text/plain');
print 'Test';


И попробуйте сделать запрос к серверу из консоли - так можно посмотреть ответ сервера целиком, вместе с заголовками.

Автор: DigitSphinx 29.6.2010, 00:20
все браузеры дали один и тот же результат

Код

Content-Type: text/plain; charset=ISO-8859-1

Test


что совпадает с исходным кодом страницы!
но Perl Express просто показал строку "Test"
теперь из cmd

Код

>telnet
>set localecho
>open 127.0.0.1 80
>GET / HTTP/1.0



Код

HTTP/1.0 200 OK
Date: Mon, 28 Jun 2010 21:15:40 GMT
Server: Microsoft-IIS/7.0

Content-Type: text/plain; charset=ISO-8859-1

Test

Подключение к узлу утеряно.

Нажмите любую клавишу...


если использовать HTTP/1.1 в ответ "Bad request"

я все равно не понял где косяк ! 
в настройках IIS7 есть "Заголовки ответов HTTP" там единственная строка 
"X-Powered-By" значение "ASP.NET" тип элемента "Локальный"

Автор: ginnie 29.6.2010, 11:32
Цитата(DigitSphinx @  29.6.2010,  00:20 Найти цитируемый пост)
я все равно не понял где косяк ! 

Надо погуглить и найти http://blogs.iis.net/wadeh/archive/2009/04/13/running-perl-on-iis-7.aspx, где написано:
Цитата

There are at least two different ISAPI extensions with ActivePerl. You should make sure that you use PerlEx30.dll with IIS 7. If you use perlis.dll, you may find that response headers sent from your Perl script are added to your response page instead of going back to the client as headers.

Автор: DigitSphinx 29.6.2010, 15:15
я уже не помню где я читал про настройку IIS7 но я точно помню там было сказано что юзать надо perlis.dll !
поменял на PerlEx30.dll и куки заработали  smile 

ginnie, Спасибо! с меня пиво  smile 

ЗЫ в попытках понять что с IIS я плюнул и установил Apache, теперь у меня голова болит уже по другим вопросам )))

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