PDA

Просмотр полной версии : Решение проблемы flash - аплоадеров


wargoth
09.08.2007, 18:42
Сразу скажу, что я не гуру Action Script программирования, и знаю что вопрос не прост поэтому задаю в этой ветке.
Недавно для проекта нашел отличный open-source Flash uploader (SWFuploader http://swfupload.mammon.se/ ). Установил на тестовую страничку, попробовал - все работает, все ОК. Когда начал прикручивать в свой проект, появилось куча проблем. Зона аплоадера - админка, необходима авторизация для входа. И тут касяк - Flash Player не передает ID сессии или вообще какие-либо cookie из браузера серверу. Т.е. скрипт который принимает файлы отвергает сессию плеера и естественно не сохраняет загруженые файлы.
Есть решения по этому поводу - передать например ID сессии через GET, например upload.php?PHPSESSIONID=блаблабла. Описание - здесь: http://groups.google.com/group/cake-php/browse_thread/thread/5cedbe5a1718e9ce/3924743d44746f42?lnk=st&q=cakephp+swf+uploader&rnum=10#3924743d44746f42 .
Мало того, я пользуюсь фреймворком cakephp ( http://cakephp.org/ ), в котором помимо этого производиться проверка строки User-Agent, передаваемая браузером, которая, естественно, отличается у флэш-плеера. Отсюда у меня вопрос, возможно ли решить следующие задачи:

1) установить во Flash-плеере cookie те же, что и в браузере;
2) установить такую же строку User-Agent у плеера, как и у браузера.

Заранее спасибо за ответы.

etc
09.08.2007, 19:08
У флешки, расположенной на странице, User-Agent совпадает с браузерным.

wargoth
10.08.2007, 09:23
Да, я считаю что так и должно быть, может так оно и есть в случае с IE, но в данном случае это не так. Вот как представился браузер:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.5) Gecko/20061201 Firefox/2.0.0.5 (Ubuntu-feisty)

а так представился плеер:
Shockwave Flash

Мой плеер - 9.0.31.0

Есть идеи по поводу кукисов?

etc
10.08.2007, 10:04
Так, ещё раз: флешка, расположенная на странице, в браузере, имеет тот же User-Agent, что и браузер. Во всяком случае, под Windows и Mac OS X точно. Под Linux не знаю.

А standalone-плеер имеет свой User-Agent и Cookie не поддерживает.

wargoth
10.08.2007, 12:16
Я постучался разными браузерами с разных операционок и вот результаты. Сначала буду писать как представился браузер, через строчку - плеер.

FF под линухом:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)
Shockwave Flash

FF под виндой
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Shockwave Flash

IE6 под линухом (проект IE4L):
Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)
Shockwave Flash

IE7 под виндой
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MyIE2; MRA 4.9 (build 01863); .NET CLR 1.1.4322)
Shockwave Flash

IE6 под виндой
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; MRA 4.9 (build 01863))
Shockwave Flash

Что вы имели ввиду под "standalone-плеер"? Я имею ввиду только тот плеер который отображается на странице в браузере. Разве могут здесь быть варианты?

etc
10.08.2007, 12:52
Гм, очень странно, но у меня везде User-Agent совпадает с браузерным.

Например, для FF:

GET /month.php HTTP/1.1
Host: etcs.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive


Строчка из лога сервера:

[10/Aug/2007:11:49:39 +0400] "GET /month.php HTTP/1.1" 200 300 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"

К month.php обращается флешка. Для IE/Opera результат тот же. User-Agent, равный Shockwave Flash бывает только у standalone-плеера. standalone — это обычный исполняемый плеер, приложение. Т.е. я запускаю swf-ку с винта и при обращении оно к серверу User-Agent равен Shockwave Flash. Такая схема действительна для плееров, начиная с шестой версии, более старые не проверял.

Tardos Mors
10.08.2007, 13:12
Хм... Интересная проблема. У меня user-agent тоже везде совпадает с браузерным.
Может быть дело в том, как флешка вставлена в страницу? Врядли конечно, но ничего другого в голову не идет.

etc
10.08.2007, 13:14
У меня в логе сервера всего 4 Shockwave Flash встречается и то, там в Referer написан линк на локальный файл, т.е. это standalone-плеер. Лог — 12 метров.

wargoth
10.08.2007, 13:20
Я честно говоря не разбирался, как она вставлена. Вообще очень любопытное использование. Посмотрите демо на главной : http://swfupload.mammon.se/ . Все делает javascript, а флэшка вообще скрыта.

_etc, month.php запрашивается флэшкой? В моем случае идет POST. Может тоже есть разница?

Я так понимаю, что кукисов во флэшке нет таких же как у браузеров? Если есть, то как их устанавливать?

etc
10.08.2007, 13:25
wargoth, вот с POST:

POST /php/book/index.php HTTP/1.1
Host: etcs.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Referer: http://etcs.ru/swf/guestbook.swf
Content-type: application/x-www-form-urlencoded
Content-length: 69
Connection: keep-alive

Лог сервера:

[10/Aug/2007:12:22:13 +0400] "POST /php/book/index.php HTTP/1.1" 200 1956 "http://etcs.ru/swf/guestbook.swf" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"

Кукисы браузер шлет отдельно от флеша. И вообще, запросом данных занимается сам браузер.

wargoth
10.08.2007, 17:15
Хмм... посмотрел я скрипт, вставляется флешка размером 1х1 пиксел в верхний левый угол в скрытый див. вроде все ок, ничего сверхъестественного. флэшка играет роль загрузчика и не более. советую взглянуть на исходники. Может кто-нибудь проанализировать что там происходит? Буду очень благодарен.

etc
10.08.2007, 17:20
Если честно, то нет желания.
Какой будет User-Agent при аплоаде, я не знаю, вот это я как раз не проверял :D
В обычных ситуациях User-Agent совпадает с браузерным.

wargoth
10.08.2007, 17:28
Ну что товарищи? Неужели никто не поможет? SWF аплоадер является самым удобным вариантом среди всех аплоадеров. Сделайте свой вклад в open-source ;)
Прикрепляю сам исходник...

wargoth
10.08.2007, 18:41
значит, насколько я понимаю, нет возможности через AS самому установить user-agent и кукисы?

etc
10.08.2007, 18:46
Нет, эти заголовки ActionScript не может изменить.

Kikasso
11.08.2007, 03:11
Ну кикисы-то можно изменить гнусным хаком (флешом "впрыснуть" в html небольшой javascript), но лучше это делать обычным путем - javascript на странице, флеш его дергает.