Forum Webscript.Ru

Программирование => Perl => Тема начата: Eugene2001 от 01 Августа 2002, 18:49:02

Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 01 Августа 2002, 18:49:02
А можно определить с какой страницы пришел человек и зависимости от ее адреса (тот, который нужен или любой другой) вы вести ему одну из 2-х html страницу:

если зашел с нужного адреса - то первую страницу,
если с любого другого - то вторую...


или это не относится к cgi?
Название: А можно определить откуда пришел человек...
Отправлено: glebushka от 01 Августа 2002, 18:58:34
$ENV{HTTP_REFERER}
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 01 Августа 2002, 19:22:00
как бы мне хотелось, что бы мне это о чем-то сказало...

я только догадываюсь, что надо писать, что-то типа "Если $ENV{HTTP_REFERER} = "нужный адрес", то делать то-то, если...

но я совсем не разбираюсь в скриптах (максимум, что я могу так это установить уже готовый...)
...


большая просьба, если этот код займет всего несколько строчек и отнимет пару минут вашего времени, то, пожалуйста, приведите его в форуме или мне на почту veb@zmail.ru


заранее спасибо,

с уважением,
Евгений
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 19:32:04
$etalon_url="http://vasia.doma.net";#Эталон url
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
if ($etalon_url eq $client_url){&ok}
else {&no_ok}
sub ok{
print "Location: http://vasia.doma.net/ok.htm\\n\\n";#куда идти если все ок
}
sub no_ok{
print "Location: http://vasia.doma.net/no_ok.htm\\n\\n";# куда идти в случае неудачного захода
}


в 99% будет работать
(не всегда удается поймать этот HTTP_REFERER)
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 01 Августа 2002, 19:33:59
СУПЕР!, спасибо!

поеду домой пробовать...
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 19:38:46
Цитировать
я совсем не разбираюсь в скриптах (максимум, что я могу так это установить уже готовый...)

Не забудь начать скрипт с #!/usr/bin/perl
 :)
Название: А можно определить откуда пришел человек...
Отправлено: NeoNox от 01 Августа 2002, 19:56:38
Цитировать
if ($etalon_url eq $client_url){&ok}
...
(не всегда удается поймать этот HTTP_REFERER)

:) А последний процент?
....
if (($etalon_url eq $client_url) and ($client_url ne \'\')){&ok}
...
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 20:25:02
А, ну да :)
Хотя подожди, если эталон совпал с визитером то визитер уже не может быть \'\' Не прав?ИМХО прав! Следовательно, я подозреваю что это была очепятка вместо and нужен or а вместо ne -> eq!
Во блин, чисто писание

А вообще вот что мне удалось как-то выудить на этот HTTP_REFERER -> Field blocked by Outpost (http://www.agnitum.com)
Тоесть я так понял, последнее время люди стремятся всячески себя "зашифровать" в сети
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 01 Августа 2002, 20:27:29
спасибо всем за помощь!

тут возник еще один маленький вопрос по модификации этого скрипта...

а можно ли сделать так чтобы эти две страница (когда какая нужна, конечно) грузились бы с ОДНОГО И ТОГО ЖЕ адреса, например, http://vasia.doma.net/check.htm, а не редиректилось на
http://vasia.doma.net/ok.htm или http://vasia.doma.net/no_ok.htm


или это нельзя сделать с помощью cgi?

---
Евгений
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 20:43:54
Ну почему нельзя, можно! Фреймом или
предположим, что check.htm содержит всего одну строку

где check.pl и есть твой новый скрипт
модифицируем скрипт вот так:
print "Content-type: text/html\\n\\n";
$etalon_url="http://vasia.doma.net";#Эталон url
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
if (($etalon_url eq $client_url) or (!$client_url)){&ok}
else {&no_ok}
sub ok{
open C,"../ok.htm";# ну вот тут надо правильно расчитать путь к ok.htm
print ;close C
}
sub no_ok{
open C,"../no_ok.htm";и соответственно к no_ok.htm
print ;close C
}

все, работает 100% :)
варианты от папки cgi-bin - 1) ../ok.htm
2) ../www/ok.htm
3) ../html/ok.htm
4) ../htmldoc/ok.htm
Название: А можно определить откуда пришел человек...
Отправлено: glebushka от 01 Августа 2002, 20:48:33
Цитировать
грузились бы с ОДНОГО И ТОГО ЖЕ адреса, например, http://vasia.doma.net/check.htm, а не редиректилось на
http://vasia.doma.net/ok.htm или http://vasia.doma.net/no_ok.htm

Так - нет.
Но можно сделать страницу:
http://vasia.doma.net/cgi-bin/check.cgi
В этом случае страница динамически генерируется скриптом. В зависимостит от полученных данных
Хотя... можно инклудить скрипт, но тогда придётся использовать Явускрипт и это не есть очень большой гут (у юзверя он может быть отключён).
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 20:53:21
Ну я несколько другой вариант предлагаю, забирать готовую страницу и выводить ее. Причем можно их в каталог cgi-bin поместить вместе с скриптом. Тогда путь убираем вообще и пишем
open C,"ok.htm";
print ;
close C;
Название: А можно определить откуда пришел человек...
Отправлено: glebushka от 01 Августа 2002, 20:54:09
ESE контакт:-)
Цитировать
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел

гм. а разве при инклуде скрипт не выдаёт страницу, в которую он инклудится?
Название: А можно определить откуда пришел человек...
Отправлено: glebushka от 01 Августа 2002, 20:56:27
Цитировать
Ну я несколько другой вариант предлагаю

Я тебя понял, просто не успел прочесть твою мессагу:-)
Просто я думаю что при инклуде в $ENV{\'HTTP_REFERER\'} будет check.htm? Хотя я могу очень глубоко заблуждаться.
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 20:57:17
Во блин, а ведь ты прав! Все подаю в отставку :)
[застрелился :) ]
Название: А можно определить откуда пришел человек...
Отправлено: NeoNox от 01 Августа 2002, 20:57:34
Цитировать
Хотя подожди, если эталон совпал с визитером то визитер уже не может быть \'\' Не прав?ИМХО прав!
Это я не прав. Не вник в смысл :(.
Цитировать
гм. а разве при инклуде скрипт не выдаёт страницу, в которую он инклудится?
именно так...
Название: А можно определить откуда пришел человек...
Отправлено: alex007 от 01 Августа 2002, 21:24:18
Да относится к CGI и Perlу

$ENV{\'HTTP_REFERER\'}
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 22:11:05
В общем скорее всего невыйдет ничего из этого ( а может и не кчему все это,ЛУЧШЕБЫ ВОДКИ ВЫПИЛИ) :)
 /глеб, приелось,но сейчас в тему :beer: /
Название: А можно определить откуда пришел человек...
Отправлено: Unregistered от 01 Августа 2002, 22:27:39
Цитировать
В общем скорее всего невыйдет ничего из этого

Ну не совсем так. Можно выловить перловым скриптом $ENV, сгенерить фрейм, который будет скриптом с переданным значением. Через ж@пу, конечно, но работать будет...:)
(Это был NeoNox)
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 01 Августа 2002, 22:53:52
Ну я тоже об этом думал :) и мне тоже показалось это через ж
но всеже достигнуть цели любыми средствами !

ЗЫ: Помойму автор сабжа уже нашел выход на ПХП

if (strstr(getenv(\'HTTP_REFERER\'),\'yandex.ru\')) {
   include(\'yandex_pages.php\');
}else {
   include(\'not_yandex_pages.php\');
}
?>
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 02 Августа 2002, 00:27:40
как раз собирался скинуть вам этот php код...

но может все-таки подскажите как это сделать на cgi "через ж@пу"?


Евгений
Название: А можно определить откуда пришел человек...
Отправлено: glebushka от 02 Августа 2002, 00:52:19
Гм... Не знаю что именно имел в виду NeoNox,  предполагаю следующее:
сделать этот файл в виде фреймсета, один "невидимый фрейм" - размеры ноль (грузится пустая страничка, ну или твои философские размышления о сущности бытия, только в урезанном варианте, чтоб особо не тормозило, а большой фрейм будет ссылкой на скрипт, т.е. http://www.domen.ru/cgi-bin/script.cgi который как раз и будет анализировать $ENV{\'HTTP_REFERER\'} (как я помню он не будет возвращать файл фреймсета) и в зависимости от этого генерировать соответствующую страничку.
ЗЫ. Обожаю фреймы:-). Рулез фор эвер.
ЗЫЗЫ. Кстати эту трабл можно решить с помощью яваскрипта, в принципе даже без использования Перла... Но это уже история совсем другого форума:-)
Название: А можно определить откуда пришел человек...
Отправлено: ESE от 02 Августа 2002, 01:54:12
NeoNox имел ввиду скорее всего такую конструкцию:
Генерится фрейм, ты прав глеб, только большой фрейм является уже прямо ссылкой на ок.htm или no_ok.htm
Но мне кажется автору сабжа показалось некрасивым то что страница, вернее адрес в броузере будет кривоват и поэтому он хочет, А давайте ка лучше его спросим, чего он хочет и почему простой редирект его не устраивает. Эй,
Цитировать
Eugene2001  
чего думаешь по этому поводу?
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 02 Августа 2002, 02:13:03
простой редирект не устраивает только по одной причине... человек один раз попадет на страницу, а потом будет (и все, кому он даст ссылку) заходить спокойно сразу на нее...
Название: А можно определить откуда пришел человек...
Отправлено: glebushka от 02 Августа 2002, 03:05:37
Цитировать
а потом будет (и все, кому он даст ссылку) заходить спокойно сразу на нее...

а почему не подходит вариант генерирования страницы скриптом, ведь это проще простого? И посторонние не пройдут:-).
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 02 Августа 2002, 03:28:16
сорри... я прочитал переписку других участников ("В общем скорее всего невыйдет ничего из этого") и cтормозил...

подумал, что ваш способ, когда человек заходит на http://vasia.doma.net/cgi-bin/check.cgi тоже не работает...
----
вы предлагаете, чтобы посетитель заходил на http://vasia.doma.net/cgi-bin/check.cgi, где генерировалась бы нужная страница... и адрес бы не изменился, а так и остался бы... да?

подскажите пожалуйста, что мне написать в этом скрипте, чтобы подгрузить ok.htm или no.htm (в них будут грузиться и картинки и текст) - вариант, который предложил ESE (работающий в 99%) + исправления внесенные  NeoNox  и потом подправленные опять ESE?
 

Евгений
Название: А можно определить откуда пришел человек...
Отправлено: Unregistered от 02 Августа 2002, 12:09:50
Цитировать
человек заходит на http://vasia.doma.net/cgi-bin/check.cgi тоже не работает...

работает!
Вот что надо написать в скрипте:
#!/usr/bin/perl
print "Content-type: text/html\\n\\n";
$etalon_url="http://vasia.doma.net";#Эталон url
$client_url=$ENV{\'HTTP_REFERER\'};# Откуда пришел
if (($etalon_url eq $client_url) or (!$client_url)){&ok}
else {&no_ok}
sub ok{
open C,"ok.htm";# ну вот тут надо правильно расчитать путь к ok.htm
print ;close C;
}
sub no_ok{
open C,"no_ok.htm";и соответственно к no_ok.htm
print ;close C;
}
Файлы могут называться и по-другому но находится в каталоге скрипта.
Название: А можно определить откуда пришел человек...
Отправлено: Unregistered от 02 Августа 2002, 12:11:22
Это был glebushka:)
Название: А можно определить откуда пришел человек...
Отправлено: Eugene2001 от 04 Августа 2002, 01:14:57
СПАСИБО ОГРОМНОЕ ВСЕМ ЗА ПОМОЩЬ!!!

у вас очень полезный и дружелюбный для новичков форум!


с уважением,
Евгений