Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > Общие вопросы

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 29.05.2002, 19:17
[subway]design вне форума Посмотреть профиль Отправить личное сообщение для [subway]design Посетить домашнюю страницу [subway]design Найти все сообщения от [subway]design
  № 1  
[subway]design
 
Аватар для [subway]design

Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
По умолчанию Проверка наличия плеера без использования JavaScript :)


Привет!

Итак, "пособие по обнаружению плеера у пользователя и выдаче ему флеш или хтмл версии документа":

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");
	}
	




?>
__________________
subway.net.ru

Старый 29.05.2002, 23:53
Junge вне форума Посмотреть профиль Отправить личное сообщение для Junge Найти все сообщения от Junge
  № 2  
Junge
 
Аватар для Junge

Регистрация: Jul 2001
Адрес: Питер
Сообщений: 820
Отправить сообщение для Junge с помощью ICQ
во всех бродилках пашет ?

Старый 30.05.2002, 10:19
lexass вне форума Посмотреть профиль Отправить личное сообщение для lexass Посетить домашнюю страницу lexass Найти все сообщения от lexass
  № 3  
lexass
 
Аватар для lexass

Регистрация: Sep 2000
Адрес: SPb
Сообщений: 3,374
Отправить сообщение для lexass с помощью ICQ
2 Junge
при наличии поддержки куков

Старый 30.05.2002, 10:23
[subway]design вне форума Посмотреть профиль Отправить личное сообщение для [subway]design Посетить домашнюю страницу [subway]design Найти все сообщения от [subway]design
  № 4  
[subway]design
 
Аватар для [subway]design

Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
Цитата:
Если у посетителя такой древний броузер, что тот не поддерживает META HTTP-EQUIV, то это посетитель никогда не сможет проникнуть на сайт. Но таких посетителей единицы.
Цитата:
Также создается сессия и сессионная переменная dfp_flash_s=yes/no, на случай отключенных кук - пусть посетитель хоть во время сеанса не будет каждый раз подвергаться проверке.
Внимательней читать надо

зы: только в туториале сказано, что куки на неделю, хотя все настраивается (см. dfp_ini.php)
__________________
subway.net.ru


Последний раз редактировалось [subway]design; 30.05.2002 в 10:25.
Старый 30.05.2002, 18:03
[subway]design вне форума Посмотреть профиль Отправить личное сообщение для [subway]design Посетить домашнюю страницу [subway]design Найти все сообщения от [subway]design
  № 5  
[subway]design
 
Аватар для [subway]design

Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
Кстати, чтобы выяснить какой у пользователя плеер (МХ или 5) достаточно продлить выполение getURL() у пятерочного ролика секунды на две, а второй ролик сделать таким же, только с компрессией кода и getURL() должен выполняться сразу же после загрузки. Если у пользователя пятый плеер, то после загрузки компрессированного ролика тот ничего не поймет и редиректится только через 2 секунды через пятерочную версию.
__________________
subway.net.ru

Старый 30.05.2002, 18:30
SPV вне форума Посмотреть профиль Отправить личное сообщение для SPV Найти все сообщения от SPV
  № 6  
SPV
 
Аватар для SPV

Регистрация: Jan 2000
Адрес: St-Petersburg
Сообщений: 1,229
Отправить сообщение для SPV с помощью ICQ
Цитата:
Также создается сессия и сессионная переменная dfp_flash_s=yes/no, на случай отключенных кук - пусть посетитель хоть во время сеанса не будет каждый раз подвергаться проверке.
О какой сессии идёт речь при отключеных куках?
__________________
Two beer or not two beer?...

Старый 30.05.2002, 22:07
[subway]design вне форума Посмотреть профиль Отправить личное сообщение для [subway]design Посетить домашнюю страницу [subway]design Найти все сообщения от [subway]design
  № 7  
[subway]design
 
Аватар для [subway]design

Регистрация: Oct 2001
Адрес: в Петербурге
Сообщений: 2,430
Мне казалось, что при отключенных куках инфа о сессии хранится в части url, в переменной PHP_SESS_ID (название точно не помню)... Или это не так
__________________
subway.net.ru

Создать новую тему   Часовой пояс GMT +4, время: 02:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:53.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.