Pergunta

Eu preciso ter certeza de que apenas uma instância de um SWF é aberto a qualquer momento em um computador, seja em 2 janelas do navegador, ou dois navegadores diferentes.

Como posso fazer sobre isso?

eu tenho até agora pensado duas soluções possíveis:

1) Usar um SharedObject Flash - mas desde que eles nunca expiram, se o usuário fechar a janela do navegador sem chamar minha função sair para removê-lo, o objeto restante irá interferir com outras novas sessões. (Talvez um número aleatório e timestamp para identificar a instância?)

2) Usando uma LocalConnection - um pouco hackish, esta Relys no SWF detectar se um objecto localConnection está a ser utilizado, e não o carregamento se for esse o caso. Mas localconnections parece bater à menor provocação, por isso estou um pouco cauteloso em utilizá-lo.

Foi útil?

Solução

Eu acredito LocalConnection tem uma advatage sobre solução SharedObject -. Permite nomes LocalConnection global em escopo, embora SharedObjects locais são sempre armazenados por domínio, tanto quanto eu sei

Quanto SharedObject, a única opção é manter timestamp atualizado regularmente nele, e verificá-lo cada vez que seus .swf é executado.

Então eu optar por uma solução simples baseada em LocalConnection, porque é bastante simples, e eu nunca tinha experimentado quaisquer problemas com LocalConnection.

public class LCTest extends Sprite
{
    public function LCTest()
    {
        var lc:LocalConnection = new LocalConnection();
        lc.allowDomain("*");
        try
        {
            lc.connect("_myLCLock"); // underscore for global scope
            trace('not running, can init');
        }
        catch (e:ArgumentError)
        {
            trace('already running');
        }
    }
}

Outras dicas

Se o SWF está disponível apenas a partir de um local, eu acho Shared Objects são uma aposta segura. Eu não acho que há qualquer necessidade de se preocupar com sessioning complicado, deve haver um evento de desligamento você pode pegar mesmo quando o navegador é fechado manualmente. (Mesmo se não houver, eu estou 99% certo de que SOs são liberadas no desligamento não importa o que, de modo algum solução alternativa deve ser possível.)

No entanto, objetos compartilhados são intrinsecamente ligada à localização do SWF, para que um usuário poderia contornar o método acima, exibindo uma segunda cópia do SWF que tinha guardado localmente ou enviados para um servidor web diferente, ou o que quer. Se isso é uma preocupação, e se o SWF seria ainda o trabalho em tal situação um, então eu acho que LocalConnection é sua única opção. Mas eu nunca encontrei LC ser muito confiável também. Eu não sei se isso poderia ser feito à prova de balas, mas eu acho que é a única outra opção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top