![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Приветы, многоуважаемые гуру
Я разбираюсь в одном перловом скрипте. и у меня, как у полного новичка в этой области возник вопрос. Как мне в скрипте узнать, были ли уже высланы заголовки на клиента? Мне это необходимо, чтобы узнать, можно ли ещё послать куки и, или уже всё поздно. |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
Прочитать их Любой броузер при запросе к любому адресу отпраляет куки установленные для этого URI. Соответственно скрипт может ему в ответе поставить новые... Есть несколько модулей для работы с куками, но самый распространненый способ я думаю это соответствующие методы из CGI.pm. -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Я немного другое имейу ввиду.
После того, как я пишу:
Могу ли я как нибудь узнать, что куки больше не посадить, потому что print уже был? Не считайте меня за извращенца. Систему не я писал. А тот чувак бросается этими print cgi->header в коде где попало. Я систему авторизации на куки переделываю, поэтому мне важно узнать, ушёл заголовок, или нет. Если ушёл, а я пишу print cgi->header(@cookie), то естественно весь заголовок выводится в хтмл. А я хочу этого избежать. т.е лучше не трогать куки вообще. |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
А никак...
Только отслеживая вывод.... и анализируя ушел заголовок или нет... но имхо, это заплатка на заплатке проще переписать такое.... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| Zuzu |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 19.10.2006 Где: Екатеринбург Репутация: 1 Всего: 4 |
Т.е., пусть будет такой код:
some_component1() some_component2() some_component3() могут вывести $cgi->header, а может и нет. (славно, правда? все бы программы так работали!) И в my_component() надо либо выводить $cgi->haeder(@cookie), если ни один из предыдущих компонентов его не вывел и не выводить, если (хотя-бы один) вывел. Причем some_component'ы написаны не тобой и нет ни времени, ни желания в них разбираться. Лучше бы, чтобы все изменения были сведены в них к минимуму (т.е. хочется такого "программистского счастья"). Все так? Или наоборот.
- запредить $cgi->header() для "нетвоих компонентов" Или совсем что-то другое? Это сообщение отредактировал(а) Zuzu - 29.1.2007, 11:27 --------------------
Проводить эксперименты на живом сервере опасно, а на мертвом - бесполезно. |
||||||
|
|||||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Zuzu, абсолютно точное описание!
|
|||
|
||||
| Zuzu |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 19.10.2006 Где: Екатеринбург Репутация: 1 Всего: 4 |
Попробуй "обернуть" CGI.pm в обертку. Сделай свой класс, а наследуй все методы от CGI.pm. А метод header перепиши, чтобы он где-то запоминал, был он вызван или нет. Интересно, вынесет ли CGI.pm такое издевательство? Может и не вынести... Если у нас "счастливая объектная семья", то выполняется принцип замещаемости, т.е. если вместо CGI.pm ты будешь использовать свой класс-обертку, то вызывающей стороне должно быть абсолютно по барабану, использовать ли базовый класс либо класс-потомок. Т.е. все компоненты должны работать нормально и этого замещения не видеть. Другое дело, если кто-то из них будет работать с CGI.pm, как с пакетом (в понимании perl, т.е. экспортировать из него функции или обращаться к ним напрямую), а не посредством его "объектного вызова" - тогда, естественно, это не спасет. Если разные модули работают с разными экземплярами CGI.pm (каждый сам делает для себя экземпляр объекта командой my $cgi = new CGI), то можно "хранить ключик вызова" в переменной пакета myCGI. Иначе (что, на самом деле более правильно с точки зрения ООП) - в данных экземпляра. Как у тебя - непонятно, поэтому в примере хранится в "пакетной переменной". Вот пример кода класса-обертки:
Код писал прямо в форум, поэтому может и не работать. Но идею постарался изложить понятно. Добавлено @ 15:01 Естественно, надо либо в компонентах заменить вызов (use CGI на use myCGI), назвать файл myCGI.pm и т.д. и т.п. P.S. Да, заплатка на заплатке получается... Это сообщение отредактировал(а) Zuzu - 29.1.2007, 16:59 --------------------
Проводить эксперименты на живом сервере опасно, а на мертвом - бесполезно. |
|||
|
||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Кста, куки можно записывать сколь угодно, но приходится под каждую запись кука отводить свой cgi файл, так как только один заголовок моно передать в одном файле. Это тупо конечно.
--------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
А поподробнее можна пожалста.... А то мне предстоит еще много работы с куками... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| Materium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 4.12.2006 Где: Питер Репутация: нет Всего: 2 |
Nab, ну я по сравнению с вами конечно фигово разбираюсь.
Я тоже столкнулся с проблемой, когда мне нужно было записать куку. Я её записал, но потом в том же скрипте мне нужно было ещё одну куку записать, другую. А заголовок я уже посылал, записывая первую куку. И при повторном отпрпавлении заголовка, всем известно, кука просто выводится на экран и всё. Ну я нашёл тупой способ, записал вторую куку из другого cgi файла. Это наверное тупо, но меня устроило потому что именно тот, второй скрипт обрабатывал то, что мне нужно. В итоге у меня в папке с кукесами в винде есть один файл кука, соответствующий определённому адресу (в частности, например, локальному), но в нём несколько записей в одну строку. То есть несколько куков. При получение кука ни браузер, ни что другое не запутается, и выдаст вам значение того кука, имя которого вы указываете. Я надеюсь что ничего нового я не открыл. --------------------
#!sub abc {return "ok"}${&abc()}="TMTOWTDI";print "$ok"; |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
Materium, без обид, но прежде чем что-то писать, тем более в утвердительной и безоговорочной интонации стоит подумать хоть немного, и всесторонне рассмотреть вопрос....
И большая рекомендация, начните изучать сторонние модули, и как самый полезный думаю лучше всего начать с CGI.pm. В нем реализованы очень интересные решения как архитектурого плана, так и работа со всемозможным CGI окружением... И если делать все правильно используя его методы то таких утверждений я надеюсь от вас больше не будет... Он конечно не образец быстродействия, но он реально очень универсален и поможет во многих случаях при работе с веб... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Вынесет. Я как-то уже сталкивался с аналогичной проблемой. Только придётся переопределить некоторые методы, например param(). -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Ребята, спасибо за поддержку! Я всё таки применил усердие и отделил мух от котлет
Но думаю многим инфа с этого топа будет в помощь |
|||
|
||||
| Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Очень приятно через пару лет появится на форуме и встретить старых модеров, кстати а не проще-ли обойтись вообще без куки, полезность здесь только одна: Здравствуйте многоуважаемый, после вашего посещения было столько-то сообщений... может я не прав?
|
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 8 Всего: 37 |
Это Вы о чем? -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |