Просмотр полной версии : Решение проблемы flash - аплоадеров
Сразу скажу, что я не гуру 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 у плеера, как и у браузера.
Заранее спасибо за ответы.
У флешки, расположенной на странице, User-Agent совпадает с браузерным.
Да, я считаю что так и должно быть, может так оно и есть в случае с 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
Есть идеи по поводу кукисов?
Так, ещё раз: флешка, расположенная на странице, в браузере, имеет тот же User-Agent, что и браузер. Во всяком случае, под Windows и Mac OS X точно. Под Linux не знаю.
А standalone-плеер имеет свой User-Agent и Cookie не поддерживает.
Я постучался разными браузерами с разных операционок и вот результаты. Сначала буду писать как представился браузер, через строчку - плеер.
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-плеер"? Я имею ввиду только тот плеер который отображается на странице в браузере. Разве могут здесь быть варианты?
Гм, очень странно, но у меня везде 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 тоже везде совпадает с браузерным.
Может быть дело в том, как флешка вставлена в страницу? Врядли конечно, но ничего другого в голову не идет.
У меня в логе сервера всего 4 Shockwave Flash встречается и то, там в Referer написан линк на локальный файл, т.е. это standalone-плеер. Лог — 12 метров.
Я честно говоря не разбирался, как она вставлена. Вообще очень любопытное использование. Посмотрите демо на главной : http://swfupload.mammon.se/ . Все делает javascript, а флэшка вообще скрыта.
_etc, month.php запрашивается флэшкой? В моем случае идет POST. Может тоже есть разница?
Я так понимаю, что кукисов во флэшке нет таких же как у браузеров? Если есть, то как их устанавливать?
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"
Кукисы браузер шлет отдельно от флеша. И вообще, запросом данных занимается сам браузер.
Хмм... посмотрел я скрипт, вставляется флешка размером 1х1 пиксел в верхний левый угол в скрытый див. вроде все ок, ничего сверхъестественного. флэшка играет роль загрузчика и не более. советую взглянуть на исходники. Может кто-нибудь проанализировать что там происходит? Буду очень благодарен.
Если честно, то нет желания.
Какой будет User-Agent при аплоаде, я не знаю, вот это я как раз не проверял :D
В обычных ситуациях User-Agent совпадает с браузерным.
Ну что товарищи? Неужели никто не поможет? SWF аплоадер является самым удобным вариантом среди всех аплоадеров. Сделайте свой вклад в open-source ;)
Прикрепляю сам исходник...
значит, насколько я понимаю, нет возможности через AS самому установить user-agent и кукисы?
Нет, эти заголовки ActionScript не может изменить.
Ну кикисы-то можно изменить гнусным хаком (флешом "впрыснуть" в html небольшой javascript), но лучше это делать обычным путем - javascript на странице, флеш его дергает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.