Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Как передать сессию из php во flash? (http://www.flasher.ru/forum/showthread.php?t=198369)

ImPuLsE 25.04.2013 10:27

Как передать сессию из 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 во флеш...

Gaen 25.04.2013 11:29

Вам нужно прокинуть id сессии со страницы во флешку через flashvars, и прицепить его к запросу (засунуть в vars)

ImPuLsE 25.04.2013 11:44

Цитата:

Сообщение от Gaen (Сообщение 1131182)
Вам нужно прокинуть id сессии со страницы во флешку через flashvars, и прицепить его к запросу (засунуть в vars)

А не могли бы вы по подробнее про "засунуть в vars" ... желательно код... Заранее благодарен.

caseyryan 25.04.2013 12:13

Если флешка встраивается через 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);


ImPuLsE 25.04.2013 14:26

Цитата:

Сообщение от caseyryan (Сообщение 1131185)
Если флешка встраивается через 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 что прописать нужно? Если не затруднит то в моем коде...

caseyryan 25.04.2013 18:42

В ас3 в документ классе надо получить ссылку на эти переменные через:
Код AS3:

package {
    public class Main extends Sprite {
            public function Main() {
                  var flashVars:Object = stage.loaderInfo.parameters;
                  trace(flashVars.session); // и тут посмотреть id сессии
            }
    }
}

Хоть в документ классе это делать или нет - не принципиально. Главное чтобы доступ к stage был.
Так же можно использовать ссылку на root вместо stage

chamele0n 25.04.2013 18:57

Цитата:

Сообщение от ImPuLsE (Сообщение 1131183)
"засунуть в 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 сделал, но это уже на стороне сервера

ImPuLsE 26.04.2013 10:11

Цитата:

Сообщение от caseyryan (Сообщение 1131279)
В ас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>

Что не так подскажите, просто сроки поджимают уже... Или ссылку где почитать... Ну не нашел я ничего про флеш сессии... : (

caseyryan 26.04.2013 10:31

А что эт о ха конструкция?
Код AS3:

"<?=session_id();?>

Вызов метода, но зачем знак равенства? Или я что-то недогоняю?

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

kackbip 26.04.2013 11:11

Цитата:

я бы еще привязку сессии к ip сделал, но это уже на стороне сервера
На одном айпишнике может сидеть много хостов. И сессия у всех должна быть разная.


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

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