![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|
|
|||||
|
Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
|
Привет! Итак, "пособие по обнаружению плеера у пользователя и выдаче ему флеш или хтмл версии документа": 1) Надо выяснить, есть ли у пользователя флеш. 2) Если есть, то какой? Вдруг у нас еще пупер-версия-MХ приготовлена. 3) Еще хочется следить за сеансом/сессией пользователя чтобы не проводить проверку на каждой странице. Я расскажу только об определении плагина - второй пункт остается на домашнее задание. Инвентарь, который нам потребуется: 1) PHP 2) Flash 5/MX 3) Блокнот Что бы все работало нам нужны три файла: dfp_redirect.php, dfp_register.php и dfp_ini.php (нужен для объявления общих переменных). Первый файл должен вставляться в каждую страницу сайта с помощью функции include(), и ОБЯЗАТЕЛЬНО поверх всей поступающей в броузер информации, например так: --------------------------- somefile.php --------------------------- <? include("http://www.somehost.ru/dfp_redirect.php"); //... include("http://www.somehost.ru/some_top_design.php"); //... ?> <body> ... --------------------------- Если include() Редиректа будет осуществлен где-то "между" данными, то куки работать НЕ БУДУТ! Файл-регистратор будет существовать отдельно и не содержать в себе ничего кроме php-кода. План действий таков: 1) Человек заходит на сайт 2) Файл-редирект уличает его в том, что у посетителя нет сессии или нет куки и его "статус" неизвестен. 3) Файл-редирект посылает его на Индекс с параметром from откуда пришел посетитель: Например: Посетитель набрал в броузере www.somehost.ru/mycop/docs/tutorial.php, файл-редирект перенаправил его на http://www.somehost.ru/index.php?dfp...s/tutorial.php Строка /mycop/docs/tutorial.php берется из переменной $REQUEST_URI. 4) Файл-регистратор выплевывает хтмл и флеш, которые редиректят на тот же файл-регистратор, только с дополнительными параметрами. Пишется хтмл код со следующими мета-указаниями: <META HTTP-EQUIV="refresh" CONTENT="4; URL=http://www.somehost.ru/директория/dfp_register.php?dfp_from=/mycop/docs/tutorial.php&dfp_flash=no"> Ниже пишется хтмл-код для ролика, c параметрами dfp_from, dfp_host и dfp_dir. Т.е. путь к ролику записывается так: some/dir/check_flash.swf?dfp_from=/mycop/docs/tutorial.php&dfp_host=имя_хоста&dfp_dir=имя_директории Имя ролика - dfp.swf, и он должен лежать в той же директории, что и скрипты register.php и redirect.php. В ролике есть один-единственный кадр со строкой: getURL(dfp_host+"/"+dfp_dir+"/dfp_register.php?dfp_from="+from+"&dfp_flash=yes"); 5) В файле-регистраторе стоит проверка на присутствие переменной $dfp_flash - если ее нет или она не равна ни no, ни yes, то пишется указанный выше хтмл; если же она валидна, то создается кука (cookie) сроком на неделю, в которой содержится переменная dfp_flash, равная no или yes. Также создается сессия и сессионная переменная dfp_flash_s=yes/no, на случай отключенных кук - пусть посетитель хоть во время сеанса не будет каждый раз подвергаться проверке. Другое имя переменной требуется для разделения переменных сессии и кук. 6) Посетитель отсылается обратно на документ, хранящийся в переменной $dfp_from, где проверяется еще раз скриптом-редиректом, который видит куку, перезаписывает ее, если надо (удлинняя ее срок), и, в зависимости от значения кукиной переменной dfp_flash выдает ему соответствующие данные. Вот весь план. В нем есть несколько некрасивых моментов, на которых я должен заострить внимание: 1) Если у посетителя нет плеера, то он ждет 4 секунды до редиректа. 2) Если ролик не загрузился за 4 секунды, то броузер его направляет по "хтмл-пути", но, с другой стороны, зачем пихать посетителю флешки, которые так тормознуто грузятся? 3) Если у посетителя такой древний броузер, что тот не поддерживает META HTTP-EQUIV, то это посетитель никогда не сможет проникнуть на сайт. Но таких посетителей единицы. Я надеюсь, что Вы полностью поняли идею, поэтому приведу совсем простенький исходный код, который легко переделать "под себя". ------------------------------------------------------------ dfp_ini.php: ------------------------------------------------------------ <? Префикс dfp_ используется для того, чтобы имена переменных, участвующих в идентификации не совпадали с другими именами переменных страницы. // // // Переменные-параметры, которые настраиваются хозяином скрипта: // // $dfp_cookie_num_days_no_flash=7; //Сколько дней хранить куку, если плеера нет. // Лучше срок покороче, чтобы посетитель, приобретя плагин, смог его применить в деле. $dfp_cookie_num_days_have_flash=30; //Сколько дней хранить куку, если плеер есть. // Чем дольше, тем лучше. Посетитель может избавиться от плеера, сменив броузер (но в новом броузере тех кук не будет) или (*) отключив activeX. $dfp_meta_refresh=4; // Время до обновления страницы с помощью тега <META> $dfp_rewrite=1; // Перезаписывать ли куку (продлевать ее срок), или ждать истечения срока, а потом проверять? // Поставьте ноль, если боитесь пункта - (*) $dfp_host="http://www.somehost.ru"; // Имя вашего сервера (без завершающего слэша!) $dfp_dir="dfp/scripts"; // Директория для скриптов. Без слэшей в начале и в конце! Если директория корневая, то поставьте $dfp_dir=""; ?> ------------------------------------------------------------
dfp_redirect.php:
------------------------------------------------------------
<?
require("dfp_ini.php");
$dfp_user_status=0;
// Проверка наличия куки.
if(isset($dfp_flash)){
$dfp_user_status=1; // Кука есть, значит "статус" посетителя известен.
if($dfp_rewrite>0){ // Если куки надо перезаписывать, перезаписываем.
// Если в куке лежит не "yes", а что-то другое (может посетитель "поправил" куку), то пишем "no".
if($dfp_flash=="yes"){
$dfp_cookie_set=setcookie("dfp_flash","yes",time()+3600*24*$dfp_cookie_num_days_have_flash);
}else{
$dfp_cookie_set=setcookie("dfp_flash","no",time()+3600*24*$dfp_cookie_num_days_no_flash);
}
}
}
// Если существует сессия, то статус посетителя известен.
if(session_is_registered('dfp_flash_s')){
$dfp_user_status=2;
}
if($dfp_user_status==1){
$dfp_detected=$dfp_flash;
}elseif($dfp_user_status==2){
$dfp_detected=$dfp_flash_s;
}else{
// Если статус неизвестен, то посылаем посетителя.
$dfp_redirect="Location: $dfp_host/$dfp_dir/dfp_register.php?dfp_from="+$REQUEST_URI;
header($dfp_redirect);
}
// Потом во "внешнем" скрипте можно использовать переменную $dfp_detected, не задумываясь о ее происхождении.
?>
------------------------------------------------------------
dfp_register.php:
------------------------------------------------------------
<?
require("dfp_ini.php");
// "Защита от дураков":
if(session_is_registered('dfp_flash_s')){
header("Location: $dfp_host/");
}
if(!$dfp_flash){
print "<html><head><title>Detecting Flash Player...</title>
<META HTTP-EQUIV=\"refresh\" CONTENT=\"$dfp_meta_refresh; URL=$dfp_host/$dfp_dir/dfp_register.php?dfp_from=$dfp_from&dfp_flash=no\">
</head><body>
<OBJECT classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"><PARAM NAME=movie VALUE=\"$dfp_host/$dfp_dir/dfp.swf?dfp_host=$dfp_host&dfp_dir=$dfp_dir&dfp_from=$dfp_from\">
<EMBED src=\"$dfp_host/$dfp_dir/dfp.swf?dfp_host=$dfp_host&dfp_dir=$dfp_dir&dfp_from=$dfp_from\" TYPE="application/x-shockwave-flash" ></EMBED>
</OBJECT></body></html>";
}else{
if($dfp_flash=="yes"){
$dfp_cookie_set=setcookie("dfp_flash","yes",time()+3600*24*$dfp_cookie_num_days_have_flash);
session_register('dfp_flash_s');
dfp_flash_s="yes";
}else{
$dfp_cookie_set=setcookie("dfp_flash","no",time()+3600*24*$dfp_cookie_num_days_no_flash);
session_register('dfp_flash_s');
dfp_flash_s="no";
}
header("Location: $dfp_host$dfp_from");
}
?>
|
|
|||||
|
во всех бродилках пашет ?
|
|
|||||
|
2 Junge
при наличии поддержки куков ![]() |
|
|||||
|
Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
|
Цитата:
Цитата:
![]() зы: только в туториале сказано, что куки на неделю, хотя все настраивается (см. dfp_ini.php) Последний раз редактировалось [subway]design; 30.05.2002 в 10:25. |
|
|||||
|
Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
|
Кстати, чтобы выяснить какой у пользователя плеер (МХ или 5) достаточно продлить выполение getURL() у пятерочного ролика секунды на две, а второй ролик сделать таким же, только с компрессией кода и getURL() должен выполняться сразу же после загрузки. Если у пользователя пятый плеер, то после загрузки компрессированного ролика тот ничего не поймет и редиректится только через 2 секунды через пятерочную версию.
|
|
|||||
|
Цитата:
__________________
Two beer or not two beer?... |
|
|||||
|
Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
|
Мне казалось, что при отключенных куках инфа о сессии хранится в части url, в переменной PHP_SESS_ID (название точно не помню)... Или это не так
![]() |
![]() |
Часовой пояс GMT +4, время: 02:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|