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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.04.2013, 10:27
ImPuLsE вне форума Посмотреть профиль Отправить личное сообщение для ImPuLsE Найти все сообщения от ImPuLsE
  № 1  
Ответить с цитированием
ImPuLsE

Регистрация: Apr 2013
Сообщений: 10
Cool Как передать сессию из php во flash?

Всем здравствуйте!
Ситуация следующая:
Имеется пару php контроллеров с авторизацией... на странице одного из них есть флешка которая считывает xml файлик. Так вот когда я авторизовываюсь флешка подгружает не сам xml а естественно страницу авторизации с логином и паролем (в контроллере происходит редирект на авторизацию, если пользователь не авторизован). И сам вопрос который уже прозвучал в названии темы - "Как передать сессию из php во flash?". Во флеше я пока что не очень, поэтому буду рад самому максимальному разжовыванию...: ) Надеюсь все понятно пояснил.

ну и сам код AS3:

Код AS3:
var info_txt:TextArea = panel_mc.main_mc.info_txt;
 
var grabber:Grabber = new Grabber();
 
function dataGrabbed(event:Event):void
{
	info_txt.text = grabber.data;
}
 
grabber.load("http://flash/func/grabber", "http://flash/func/index");
grabber.addEventListener(Event.COMPLETE, dataGrabbed);
Сам класс Grabber :

Код AS3:
 
public class Grabber extends EventDispatcher
	{
		public var phpFile:String;
		public var remoteFile:String;
		public var req:URLRequest;
		private var vars:URLVariables = new URLVariables();
		private var loader:URLLoader = new URLLoader();
		public var data:String;
 
		public function Grabber()
		{
 
		}
 
		public function load(php:String, remote:String):void
		{
			phpFile = php;
			remoteFile = remote;
			req = new URLRequest(phpFile);
			vars.fileName = remoteFile;
			req.data = vars;
			req.method = URLRequestMethod.POST;
			loader.load(req);
			loader.addEventListener(Event.COMPLETE, contentLoaded);
		}
 
		private function contentLoaded(event:Event):void
		{
			data = loader.data;
			dispatchEvent(new Event(Event.COMPLETE));
		}
 
	}
В PHP идет echo сгенерированного XML. - Кстати правильно ли что через echo? Или как то еще передавать можно данные через XML во флеш...

Старый 25.04.2013, 11:29
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Вам нужно прокинуть id сессии со страницы во флешку через flashvars, и прицепить его к запросу (засунуть в vars)
__________________
тонкий тролль, осеянный благодатью

Старый 25.04.2013, 11:44
ImPuLsE вне форума Посмотреть профиль Отправить личное сообщение для ImPuLsE Найти все сообщения от ImPuLsE
  № 3  
Ответить с цитированием
ImPuLsE

Регистрация: Apr 2013
Сообщений: 10
Цитата:
Сообщение от Gaen Посмотреть сообщение
Вам нужно прокинуть id сессии со страницы во флешку через flashvars, и прицепить его к запросу (засунуть в vars)
А не могли бы вы по подробнее про "засунуть в vars" ... желательно код... Заранее благодарен.

Старый 25.04.2013, 12:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Если флешка встраивается через SWFObject в страницу, то флешварс передается методу embedSWF седьмым аргументом
Код AS3:
var params = {
	menu: "false",
	scale: "noScale",
	allowFullscreen: "false",
	allowScriptAccess: "always",
	bgcolor: "",
	wmode: "direct"
};
var attributes = {
	id:"Main"
};
var flashvars = { session: "<?php echo $my_session_id; ?>"}; // засовываем ID сессии с помощью php в код страницы
swfobject.embedSWF(
	"Main.swf", 
	"altContent", "100%", "100%", "10.0.0", 
	"expressInstall.swf", 
	flashvars, params, attributes);

Старый 25.04.2013, 14:26
ImPuLsE вне форума Посмотреть профиль Отправить личное сообщение для ImPuLsE Найти все сообщения от ImPuLsE
  № 5  
Ответить с цитированием
ImPuLsE

Регистрация: Apr 2013
Сообщений: 10
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Если флешка встраивается через SWFObject в страницу, то флешварс передается методу embedSWF седьмым аргументом
Код AS3:
var params = {
	menu: "false",
	scale: "noScale",
	allowFullscreen: "false",
	allowScriptAccess: "always",
	bgcolor: "",
	wmode: "direct"
};
var attributes = {
	id:"Main"
};
var flashvars = { session: "<?php echo $my_session_id; ?>"}; // засовываем ID сессии с помощью php в код страницы
swfobject.embedSWF(
	"Main.swf", 
	"altContent", "100%", "100%", "10.0.0", 
	"expressInstall.swf", 
	flashvars, params, attributes);
Так а в AS3 что прописать нужно? Если не затруднит то в моем коде...

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
В ас3 в документ классе надо получить ссылку на эти переменные через:
Код AS3:
package {
    public class Main extends Sprite {
            public function Main() {
                  var flashVars:Object = stage.loaderInfo.parameters;
                  trace(flashVars.session); // и тут посмотреть id сессии
            }
    }
}
Хоть в документ классе это делать или нет - не принципиально. Главное чтобы доступ к stage был.
Так же можно использовать ссылку на root вместо stage

Старый 25.04.2013, 18:57
chamele0n вне форума Посмотреть профиль Отправить личное сообщение для chamele0n Посетить домашнюю страницу chamele0n Найти все сообщения от chamele0n
  № 7  
Ответить с цитированием
chamele0n
[+4 24.04.13]
[+4 20.04.13]

Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
Цитата:
Сообщение от ImPuLsE Посмотреть сообщение
"засунуть в vars"
он имеет ввиду что все последующие POST запросы должны содержать id сессии

Код AS3:
public function load(php:String, remote:String):void {
	phpFile = php;
	remoteFile = remote;
	req = new URLRequest(phpFile);
	vars.session_id = session_id;            
	vars.fileName = remoteFile;
	req.data = vars;
	req.method = URLRequestMethod.POST;
	loader.load(req);
	loader.addEventListener(Event.COMPLETE, contentLoaded);
}
я бы еще привязку сессии к ip сделал, но это уже на стороне сервера
__________________
Personal Page
$demo = $away3d + $bullet + $pathfinding;

Старый 26.04.2013, 10:11
ImPuLsE вне форума Посмотреть профиль Отправить личное сообщение для ImPuLsE Найти все сообщения от ImPuLsE
  № 8  
Ответить с цитированием
ImPuLsE

Регистрация: Apr 2013
Сообщений: 10
Цитата:
Сообщение от caseyryan Посмотреть сообщение
В ас3 в документ классе надо получить ссылку на эти переменные через:
Код AS3:
package {
    public class Main extends Sprite {
            public function Main() {
                  var flashVars:Object = stage.loaderInfo.parameters;
                  trace(flashVars.session); // и тут посмотреть id сессии
            }
    }
}
Хоть в документ классе это делать или нет - не принципиально. Главное чтобы доступ к stage был.
Так же можно использовать ссылку на root вместо stage
Добавил я вот сюда :
Код AS3:
var info_txt:TextArea = panel_mc.main_mc.info_txt;
var flashvars:Object = stage.loaderInfo.parameters;
trace(flashvars.session);                  
var grabber:Grabber = new Grabber();
пишет undefined

Даже если каким то чудом у меня получится вывести сессию, то каким образом флешка будет понимать что это именно сессия? какое то условие нужно?

Вот кстати вставка flash:
PHP код:
<script type="text/javascript" src="/css/swfobject.js"></script>
    <script type="text/javascript">
    var flashvars = {session: "<?=session_id();?>"};
    swfobject.embedSWF("swf/05_Remote.swf", "ac", "300", "200", "9.0.0", flashvars);
    </script>
    <div id="ac">
        <a href="http://www.adobe.com/go/getflash">
        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Загрузить Adobe Flash Player" />
        </a>
    </div>
Что не так подскажите, просто сроки поджимают уже... Или ссылку где почитать... Ну не нашел я ничего про флеш сессии... : (

Старый 26.04.2013, 10:31
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А что эт о ха конструкция?
Код AS3:
"<?=session_id();?>
Вызов метода, но зачем знак равенства? Или я что-то недогоняю?

По идее-то вроде все остальное верно.

Старый 26.04.2013, 11:11
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 10  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Цитата:
я бы еще привязку сессии к ip сделал, но это уже на стороне сервера
На одном айпишнике может сидеть много хостов. И сессия у всех должна быть разная.

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

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

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


 


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


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