Flash, klasa ExternalInterface jako mechanizm dostarczania sesji dla Flasha.

Kiedy pisałem tutaj o sesjach w przeglądarce i we Flashu, wskazując na wiele ograniczeń, nie dokończyłem tej historii na blogu. Otóż znalazło się rozwiązanie, polegające na przekazaniu owej sesji poprzez słynne FlashVars. Zrobiłem to w taki sposób, że we FlashVars’ach przekazałem 2 dodatkowe parametry

  • nazwa zmiennej sesyjnej
  • wartość zmiennej sesyjnej

We Flashu w każdym odwołaniu do usług na serwerze przesyłałem dodatkowy parametr o nazwie i wartości przekazanych we FlashVars.

Jak to działa ?

W przypadku gdy usługę woła skrypt PHP (generujący naszą stronę z flashem), zmienna sesyjna jest ustawiana jako cookie (w PHP domyślnie jest to cookie o nazwie PHPSESSID). Jeśli takie cookie już istnieje i nie jest przeterminowane to PHP z chwilą wywołania session_start() automatycznie odtworzy sesję. Jeśli nie istnieje lub jest przeterminowane, tworzona jest nowa sesja a do przeglądarki odsyłany jest nagłówek HTTP ustawiający odpowiednie cookie.

Teraz wystarczy, że nazwa cookie i jego wartość zostaną przekazane do flasha, a ten dołączy je do wszystkich żądań  kierowanych do danego serwera.

Ponieważ domyślnie w konfiguracji PHP, zmienna gpc_order ma wartość ‚GPC’ oznacza to, że dopóki klient nie odeśle do serwera cookie z sesji to ID sesji będzie poszukiwane wśród danych przychodzących w POST, a jeśli i tu nie znajdzie to w danych z GET’a.

A zatem opisany mechanizm zupełnie wystarcza do  zapewnienia integralności sesji w całej aplikacji webowej włącznie z elementami embed’owanymi.

Alternatywa do FlashVars’ów.

Można jednak do flasha przesłać dane bez użycia FlashVars. Są one niebezpieczne, gdyż bardzo ułatwiają hackowanie. W końcu dane są widoczne jawnie w podglądzie źródła strony. JavaScript przeglądarki  może wywoływać funkcje we Flashu w sposób identyczny jak na każdym innym obiekcie Core.JScript’a, DOM’u czy przeglądarki. Aby to umożliwić Flash musi niejako „wyeksportować” taką funkcję na zewnątrz. Robi się to dodając ją dynamicznie za pomocą ExternalInterface.addCallback.

Bardzo ważne! Należy sprawdzić czy przeglądarka i JavaScript są gotowe. Więcej szczegółów można znaleźć tutaj.

One Response to Flash, klasa ExternalInterface jako mechanizm dostarczania sesji dla Flasha.

  1. Dwukierunkowa komunikacja FLASH i przeglądarka | Blog programisty o C/C++ i PHP

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *