Форум 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 26.04.2013 11:11

Цитата:

Сообщение от caseyryan (Сообщение 1131336)
А что эт о ха конструкция?
Код AS3:

"<?=session_id();?>

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

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

Ну Php вместо echo так можно выводить переменную... тут норм всё...

Может еще есть у кого какие варианты по этому поводу, ну очень нужно...

caseyryan 26.04.2013 11:46

А для чего конкретно нужно знать сессию флешке и какой момент это нужно?
В принципе ее можно просто запросом получить от php
Вот в этой http://www.flasher.ru/forum/showthread.php?t=194791 теме я скидывал свой класс Packet, который написал для упрощения создания запросов к серверу.
Соответственно если послать этот пакет серверу
Код AS3:

var packet:Packet = new Packet("getSession", onSession);
private function onSession(params:Object):void {
    var session:String = params.session; // здесь можно принять идентификатор сессии
    trace(session);
}

А в php делаем просто
PHP код:

$method $_POST['method'];
if (
$method == "getSession") {
    echo 
"session=" session_id(); 


Этот вариант точно рабочий. Если не принципиально передать id сессии еще до загрузки (что, как мне кажется, не имеет значения), то можно использовать его

ImPuLsE 26.04.2013 12:18

Цитата:

Сообщение от caseyryan (Сообщение 1131344)
А для чего конкретно нужно знать сессию флешке и какой момент это нужно?

У меня во флешке в текстовом поле подгружается php страница со сгенерированным xml через echo.
В PHP при генерации xml у меня используется айдишник пользователя (который берется из php сессии после авторизации через обычную html форму) для выборки из БД.

Так вот когда я логинюсь через html форму у меня происходит редирект на страницу со флешкой соответсвенно.
Флешка на этой странице подгружает не сам XML а страницу этой html формы... Усли убрать авторизацию в контроллере то грузит структуру XML , но без данных из выборки БД т.к. не авторизован соответсвенно... и не может айди пользователя получить который используется при генерации XML.

Вроде по логике я делаю все в нужной последовательности... Может быть как то через флеш форму авторизации будет проще зделать... я просто не очень осведомлен в этой теме с сессиями....

caseyryan, с вашим пакетом соотнести все сложно пока мне...

Может есть какое то более простое решение? По идее ситуация простейшая....

caseyryan 26.04.2013 13:20

Цитата:

caseyryan, с вашим пакетом соотнести все сложно пока мне...
Почему сложно? В нем не надо ничего дорабатывать. Просто скопировать код пакета в файл с названием Packet.as

А в коде все создается в одну строчку, как я написал выше. Куда уж проще.

Код AS3:

var packet:Packet = new Packet("getSession", onSession); // в любой функции в любом своем классе можно создать новый пакет. Первый параметр, это зазвание метода, который передается пост запросом в php, второй это ссылка на метод, который нужно создать где-либо в своей флешке. Самый лучший вариант - в том же классе, из которого отправляется запрос. 
 
private function onSession(params:Object):void { // вот сам метод обработчик ответа. Он должен содержать только один параметр с типом Object. После ответа от сервера этот метод автоматически дергается через .call() в классе Packet
    var session:String = params.session; // а здесь уже можно принимать URL переменные.
    trace(session);
}


ImPuLsE 26.04.2013 14:33

Да я это уже сделал, я только вот не очень понимаю чем это мне поможет... Что за userID и password ?

Выдает мне :
userId=userId&method=getSession&pass=pass
PACKET DATA: [object Packet]
и дальше тот же html код формы авторизации через которую мне как то надо пройти...

Если убрать авторизацию на контроллере, то выдает:
userId=userId&method=getSession&pass=pass
PACKET DATA: [object Packet] session=

и соответственно ничего... откуда он вообще будет брать сессию в данном случае... Как эти логины и пароли в HTML форме то моей пройдут?

в пакете вашем пишу следующее:
Код AS3:

public class Packet extends EventDispatcher {
 
                public static const HOST:                String                = "http://flash/";
                public static const SCRIPT:                String                = "func/grabber";
                public static var PASS:                        String                = "pass";
                public static var USER_ID:                String                = "userId";

где func/grabber :

PHP код:

$method $_POST['method'];
        if (
$method == "getSession") {
            echo 
"session=" session_id(); 
        } 


caseyryan 26.04.2013 14:40

Цитата:

Что за userID и password ?
Ну это у меня для авторизации используется. Туда данные из соцсетей записываются. Отправку пароля и userId можно вообще убрать, если она не нужна. Просто в моем случае она используется каждый раз.

Вот упрощенный вариант:
Код AS3:

package  {
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.events.IOErrorEvent;
        import flash.events.SecurityErrorEvent;
        import flash.net.URLLoader;
        import flash.net.URLLoaderDataFormat;
        import flash.net.URLRequest;
        import flash.net.URLRequestMethod;
        import flash.net.URLVariables;
 
        public class Packet extends EventDispatcher {
 
                public static const HOST:                String                = "http://server.com/";
                public static const SCRIPT:                String                = "call.php";
 
                private var _callback:                Function        = null;
 
                /**
                *
                * @param        называние метода, который нужно вызывать на сервере, передается в
                * POST с ключом method
                * @param        callback метод который вызывается после прихода ответа от сервера
                * должен принимать один параметр типа Object
                */

                public function Packet(method:String, callback:Function, params:Object = null) {
                        _callback                                = callback;
                        var loader:        URLLoader        = new URLLoader();
                        loader.addEventListener(Event.COMPLETE, onComplete);
                        loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
                        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
                        loader.dataFormat                = URLLoaderDataFormat.VARIABLES;
                        var vars:URLVariables        = new URLVariables();
                        vars['method']                        = method;
                        if (params != null) {
                                for (var i:String in params) {
                                        vars[i] = params[i];
                                }
                        }
                        var rand:        String                = "?" + int(Math.random() * 10000);
                        var request:URLRequest        = new URLRequest(Packet.HOST + Packet.SCRIPT + rand);
                        request.method                        = URLRequestMethod.POST;
                        request.data                        = vars;
                        trace(request.data.toString());
                        try {
                                loader.load(request);
                        } catch (e:Error) {
                                trace(e.getStackTrace());
                        }
 
                }
 
                private function onSecurityError(e:SecurityErrorEvent):void {
                        e.target.removeEventListener(Event.COMPLETE, onComplete);
                        e.target.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
                        e.target.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
                }
 
                private function onIOError(e:IOErrorEvent):void {
                        e.target.removeEventListener(Event.COMPLETE, onComplete);
                        e.target.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
                        e.target.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
                        trace("INPUT / OUTPUT ERROR");
                }
 
                private function onComplete(e:Event):void {
                        e.target.removeEventListener(Event.COMPLETE, onComplete);
                        e.target.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
                        e.target.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
                        var data:Object = e.target.data as Object;
                        trace("PACKET DATA:", this, unescape(String(data)));
                        if (_callback != null) {
                                _callback.call(null, data);
                        }
                }
        }
}


ImPuLsE 26.04.2013 14:51

Это хорошо что упростилось, проблема остается той же... эх неужели никто не поможет в этой дурацкой проблеме... :(

caseyryan 26.04.2013 14:58

Тогда я не понимаю в чем заключается проблема. В вопросе было как передать id сессии. Так его передать можно. Все остальное уже вопросы для другой темы

chamele0n 26.04.2013 15:41

Цитата:

Сообщение от kackbip (Сообщение 1131339)
На одном айпишнике может сидеть много хостов. И сессия у всех должна быть разная.

я и не говорил что нужно из ip генерировать ключ сессии, просто сделать доп. проверку
Цитата:

Сообщение от caseyryan (Сообщение 1131336)
Код AS3:

"<?=session_id();?>


есть такая конструкция(но не везде работает) развносильна :
PHP код:

<?php print session_id();?>


ImPuLsE 26.04.2013 16:26

Цитата:

Сообщение от caseyryan (Сообщение 1131371)
Тогда я не понимаю в чем заключается проблема. В вопросе было как передать id сессии. Так его передать можно. Все остальное уже вопросы для другой темы

Т.е. при вышеупомянутом описании проблемы (сообщение 13) вы утверждаете что ваш пакет как то мне может помочь? Увы и ах...(


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

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