Автор Тема: Проблемка с Cookie  (Прочитано 8079 раз)

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

Оффлайн Sergg

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 55
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.prikol.net/
Проблемка с Cookie
« : 19 Января 2004, 18:29:24 »
Добрый день.

Есть небольшая проблемка: есть скрипт на perl который выводит определенную информацию в зависимости от двух параметров ID (индефикатор определенной информации) и FID (индификатор формата в котором нужно вывести эту информацию).
Например, http://имя_сайта.ru/cgi-bin/script.cgi?id=100011&fid=02 .
Результатом работы этого скрипта получаем информацию с id=100011 из базы и перекодированную по алгоритму с FID=02 (может меняться от 01 до 10).
Кроме всех этих преобразований скрипт заносит cookie на компьютер посетителя со значением fid (например, fid=02) используя следующие строки на perl:

print "Content-type: text/html\\n";
print "Set-Cookie: fid=02; path=/\\;  expires=Mon,31-DEC-2005 10:59:31 GMT\\n\\n";

Проблема заключается в следующем: мне нужно вставить результаты работы этого скрипта в страницу с определенным дизайном, я это делаю вставкой в shtml-файл следующей дерективы SSI и обращаюсь к shtml-файлу со всеми параметрами http://имя_сайта.ru/index.shtml?id=100011&fid=02, все что должно было вставиться и перекодироваться делается, но cookie не записываются, хотя если вызывать на прямую скрипт то все Ok.

Эта проблема в принципе решается вставкой следующего кода:
print "Content-type: text/html\\n\\n";
print "";
Но мне этот код не походит потому, что при следующем варианте перехода по страницам :

index.shtml?id=100011 --> index.shtml?id=100011&fid=02 --> index.shtml?id=100011&fid=05
     в cookie fid=00              в cookie fid=02               в cookie fid=05

а потом в обратном направлении (нажимая кнопку Назад броузера) - (смотреть справа-налево)

index.shtml?id=100011 <-- index.shtml?id=100011&fid=02 <-- index.shtml?id=100011&fid=05
     в cookie fid=00              в cookie fid=02               в cookie fid=05

я получаю cookie с fid=02, а должно быть fid=05, это потому что при движении обратно (нажимая кнопку Назад броузера) странице не кэшируются, а заново меняют значения cookie.
Но если бы я использовал самый первый код на perl и он нормально записывал cookie при вставке в shtml-файл, то все бы кешировалось при движении по ссылкам в обратном направлении - а мне так и нужно (нужно запомнить в cookie последнее значение fid при движении по ссылкам только вперед).

Поэтому нужно довести до ума первый код, так чтобы он нормально работал вставлясь в shtml-файл.

Кто все таки понял что я имел ввиду и знает как мне помочь, то помогите пожалуйста.
С уважением Сергей Груздев

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблемка с Cookie
« Ответ #1 : 19 Января 2004, 18:47:49 »
script.cgi покажи.
The documentations is your friend

Оффлайн Sergg

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 55
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.prikol.net/
Проблемка с Cookie
« Ответ #2 : 19 Января 2004, 19:03:18 »
Вот рабочая часть скрипта отвечающая за запись нужных мне cookie, весь скрипт нет смысла публиковать, потому что во время отладки не правильно работает эта часть скрипта (как отдельный скрипт)

#!/usr/bin/perl

$year = \'2050\';          
$default_format="01";

#Разделяем QUERY_STRING для последующего использования
$in=$ENV{QUERY_STRING};

@query=split /&/,$in;
if ($query[1] ne "") {@id_subcat=split /=/,$query[1];$id_p = $id_subcat[1];} else {$id_p=$default_format;}
# После выполнения условий нужные переменные хранятся в $id_c, $id_p

@query=null;
@id_cat=null;
@id_subcat=null;


$hum = $ENV{\'HTTP_COOKIE\'};
@hums = split(/\\;/, $hum);
foreach $extract (@hums) {if ($extract =~ /userphone=/) {$userphone = $extract;}}

if ($userphone eq "")
{
print "Content-type: text/html\\n";
print "Set-Cookie: userphone=$default_format; path=/;  expires=Mon,31-DEC-$year 10:59:31 GMT\\n\\n";
}
else
{
($gone1, $phone) = split(/=/, $userphone);
if ($phone ne $id_p) {
print "Content-type: text/html\\n";
print "Set-Cookie: userphone=$id_p; path=/;  expires=Mon,31-DEC-$year 10:59:31 GMT\\n\\n";
}
else {print "Content-type: text/html\\n\\n";}
}
С уважением Сергей Груздев

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблемка с Cookie
« Ответ #3 : 19 Января 2004, 20:30:09 »
Ты заголовки вставляеш как попало. Повнимательнее с ними.
Вот тебе рабочий пример:
test.cgi:

#!/usr/bin/perl
use CGI qw(:standard);

$id param("id");
$valparam("val");

print 
"Set-Cookie: $id=$val; expires=Wed, 10-Feb-2077 00:00:00 GMT\\n";
print 
header();
print 
"Ok";


index.shtml:

<!--#include virtual="test.cgi" -->


Вызов: http://www.site.com/index.shtml?id=MyId&val=0003
The documentations is your friend

Оффлайн Sergg

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 55
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.prikol.net/
Проблемка с Cookie
« Ответ #4 : 19 Января 2004, 22:00:53 »
Скрипт рабочий, но там та же проблема - при вызове скрипта напрямую cookie записываются и все Ok, но если я вставляю его результат в shtml-файл, то cookie не создаются (тестировал на домашнем апаче и в интернете).

Можете сами попробовать:
http://www.prikol.net/cgi-bin/test.cgi?id=1000&val=04 - скрипт напрямую
http://www.prikol.net/temp/test.shtml?id=1000&val=04 - вставка через SSI

Так что дело в чем-то другом.

Можно конечно оставить и так, но посетителям придется просматреть больше страниц чтобы добраться до нужной информации, а так хоть я им облегчаю задачу в 2 раза.
С уважением Сергей Груздев

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблемка с Cookie
« Ответ #5 : 19 Января 2004, 22:08:38 »
Покажи мне конфиг апача если у тебя есть к нему доступ.
The documentations is your friend

Оффлайн Sergg

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 55
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.prikol.net/
Проблемка с Cookie
« Ответ #6 : 19 Января 2004, 22:11:36 »
Могу только конфиг апача который стоит у меня на компе, на когфиг у хостера нет доступа. Нужен конфиг домашнего моего арача (только там по cookie нет вроде не чего)?
С уважением Сергей Груздев

Оффлайн Sergg

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 55
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.prikol.net/
Проблемка с Cookie
« Ответ #7 : 20 Января 2004, 09:02:08 »
Что так не кто и не знает в чем здесь может быть проблема?
С уважением Сергей Груздев

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблемка с Cookie
« Ответ #8 : 20 Января 2004, 09:59:27 »
Sergg

AFAIK Заголовки Location и Set-cookie - не работают если скрипт вставлен через SSI...

Как вариант, можно при установке куков, просто запускать отдельный скрипт устанавливать куки, а потом сразу редиректить обратно...

Оффлайн Sergg

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 55
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.prikol.net/
Проблемка с Cookie
« Ответ #9 : 20 Января 2004, 10:08:34 »
Это конечно вариант, но хочется как-то по человечески все сделать.
С уважением Сергей Груздев

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблемка с Cookie
« Ответ #10 : 20 Января 2004, 11:09:26 »
Sergg сколько раз тебе повторить про конфиг Апача?
Рабочая конфигурация:
httpd.conf:
AddType text/html .shtml .sht .shtml
AddHandler server-parsed  .shtml


......
   Options FollowSymlinks ExecCGI
   Options +Includes
......


perl, v5.8.0
Server version: Apache/1.3.20 (Unix)

Phoinix все работает. Я, как правило, проверяю то что пишу.
The documentations is your friend

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблемка с Cookie
« Ответ #11 : 20 Января 2004, 11:34:57 »
NeoNox

А я и не утверждаю :), я же говорю "насколько я знаю"

Настройка Apache:

...

...
    Options FollowSymLinks
    Options Indexes Includes
    Options +Includes
...

...
    AddType text/html .shtml .shtm
    AddHandler server-parsed .shtml .shtm
...

Perl 5.8.2
Server version: Apache/1.3.29 (Win32)

Так у меня не работает... :(, хотя скрипты я вставляю не ExecCGI, а Include Virtual...

Попробую как ты говоришь...

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Проблемка с Cookie
« Ответ #12 : 20 Января 2004, 12:03:04 »
NeoNox

Иногда работа Perl скриптов несколько удивляет... надо книжки еще почитать...

При использовании Location выводит уже не ошибку, а ссылку на URL куда редиректил... Куки соответсвенно тоже не проставляются, и IMHO знаю почему (эта тема уже обсуждалась).

(Это не лекция, это рассуждение... ;))
Тег (заголовок) закрыт, началось тело страницы
скрипт уже вставляется в тело страницы, когда заголовок передан, соответственно, передача других заголовков скриптом не пройдет... Даже если его "инклюдить" в head страницы...

Либо я где-то неправ в настройках...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблемка с Cookie
« Ответ #13 : 20 Января 2004, 12:04:59 »
Кстати, как вариант вызов скрипта таким образом -
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Проблемка с Cookie
« Ответ #14 : 20 Января 2004, 12:11:27 »
Phoinix
Вероятно это зависит от реализации броузера.
Это проверено на Мозилле, на ИЕ нет возможности проверить.
The documentations is your friend

 

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