Use scripts de sessão para gerenciar a experiência de streaming de seus usuários AppStream 2.0 - Amazon AppStream 2.0

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Use scripts de sessão para gerenciar a experiência de streaming de seus usuários AppStream 2.0

AppStream 2.0 fornece scripts de sessão na instância. Você pode usar esses scripts para executar seus próprios scripts personalizados quando eventos específicos ocorrerem em sessões de streaming dos usuários. Por exemplo, você pode usar scripts personalizados para preparar seu ambiente AppStream 2.0 antes do início das sessões de streaming dos usuários. Você também pode usar scripts personalizados para limpar instâncias de streaming depois que os usuários concluem as sessões de streaming.

Os scripts de sessão são especificados em uma imagem AppStream 2.0. Esses scripts são executados no contexto do usuário ou do sistema. Se os scripts de sessão usarem a saída padrão para gravar informações, erro ou mensagens de depuração, opcionalmente, eles poderão ser salvos em um bucket do Amazon S3 na sua conta da Amazon Web Services.

Executar scripts antes de iniciar sessões de streaming

Você pode configurar seus scripts para serem executados, no máximo, 60 segundos antes de iniciar aplicativos de seus usuários e as sessões de streaming começarem. Isso permite que você personalize o ambiente AppStream 2.0 antes que os usuários comecem a transmitir seus aplicativos. Quando os scripts de sessão forem executados, um símbolo giratório de carregamento será exibido para os usuários. Quando os scripts forem concluídos ou o tempo de espera máximo expirar, a sessão de streaming dos usuários começará. Se seus scripts não forem concluídos, uma mensagem de erro será exibida para os usuários. No entanto, os usuários não podem usar a sessão de streaming.

Ao especificar um nome de arquivo em uma instância do Windows, você deve usar duas barras invertidas. Por exemplo: .

C:\\Scripts\\Myscript.bat

Se você não usar uma barra invertida dupla, um erro será exibido para notificá-lo de que o arquivo.json está formatado incorretamente.

nota

Quando os scripts forem concluídos, eles deverão retornar um valor 0. Se seus scripts retornarem um valor diferente de 0, AppStream 2.0 exibirá a mensagem de erro para o usuário.

Quando você executa scripts antes do início das sessões de streaming e a estrutura dinâmica do aplicativo AppStream 2.0 não está habilitada, ocorre o seguinte processo:

  1. Seus usuários se conectam a uma instância de frota AppStream 2.0 que não está associada a um domínio. Eles se conectam usando um dos seguintes métodos de acesso:

    • AppStream Pool de usuários 2.0

    • SAML 2.0

    • AppStream API 2.0

  2. O catálogo de aplicativos é exibido no portal AppStream 2.0 e seus usuários escolhem um aplicativo para iniciar.

  3. Acontecerá um dos cenários a seguir:

    • Se a persistência de configurações de aplicativo estiver habilitada para os usuários, o arquivo de disco rígido virtual (VHD) que armazena as personalizações dos usuários e configurações do Windows será baixado e montado. Nesse caso, é necessário que o usuário faça login no Windows.

      Para obter informações sobre persistência de configurações de aplicativo, consulte Habilitar a persistência das configurações de aplicações para os usuários do AppStream 2.0.

    • Se a persistência de configurações de aplicativo não estiver habilitada, o usuário do Windows já está conectado.

  4. Os scripts de sessão são iniciados. Se o armazenamento persistente estiver habilitado para os usuários, a montagem do conector de armazenamento também será iniciada. Para obter informações sobre armazenamento persistente, consulte Ative e administre o armazenamento persistente para seus usuários AppStream 2.0.

    nota

    A montagem do conector de armazenamento não precisa terminar para a sessão de streaming iniciar. Se os scripts de sessão forem concluídos antes que a montagem do conector de armazenamento termine, a sessão de streaming será iniciada.

    Para obter informações sobre como monitorar o status de montagem de conectores de armazenamento, consulte Usar conectores de armazenamento com scripts de sessão.

  5. Os scripts de sessão terminam ou atingem o tempo limite.

  6. A sessão de streaming dos usuários é iniciada.

  7. O aplicativo que seus usuários escolheram é iniciado.

Para obter informações sobre a estrutura dinâmica de aplicativos AppStream 2.0, consulteUsar o framework dinâmico de aplicações do AppStream 2.0 para criar um provedor dinâmico de aplicações.

Quando você executa scripts antes do início das sessões de streaming e a estrutura dinâmica do aplicativo AppStream 2.0 é ativada, ocorre o seguinte processo:

  1. Seus usuários visitam o portal de aplicativos SAML 2.0 da sua organização e escolhem a pilha AppStream 2.0.

  2. Eles se conectam a uma instância de frota AppStream 2.0 associada a um domínio.

  3. Se a persistência de configurações de aplicativo estiver habilitada para os usuários, o arquivo VHD que armazena as personalizações dos usuários e configurações do Windows será baixado e montado.

  4. O login de usuário do Windows ocorre.

  5. O catálogo de aplicativos é exibido no portal AppStream 2.0 e seus usuários escolhem um aplicativo para iniciar.

  6. Os scripts de sessão são iniciados. Se o armazenamento persistente estiver habilitado para os usuários, a montagem do conector de armazenamento também será iniciada.

    nota

    A montagem do conector de armazenamento não precisa terminar para a sessão de streaming iniciar. Se os scripts de sessão forem concluídos antes que a montagem do conector de armazenamento termine, a sessão de streaming será iniciada.

    Para obter informações sobre como monitorar o status de montagem de conectores de armazenamento, consulte Usar conectores de armazenamento com scripts de sessão.

  7. Os scripts de sessão terminam ou atingem o tempo limite.

  8. A sessão de streaming dos usuários é iniciada.

  9. O aplicativo que seus usuários escolheram é iniciado.

Executar scripts após sessões de streaming

Você também pode configurar seus scripts para execução após sessões de streaming dos usuários. Por exemplo, você pode executar um script quando os usuários selecionam Encerrar sessão na barra de ferramentas AppStream 2.0 ou quando atingirem a duração máxima permitida para a sessão. Você também pode usar esses scripts de sessão para limpar seu ambiente AppStream 2.0 antes que uma instância de streaming seja encerrada. Por exemplo, você pode usar scripts para liberar bloqueios de arquivo ou fazer upload de arquivos de log. Quando você executar scripts após sessões de streaming, o seguinte processo ocorrerá:

  1. A sessão de streaming AppStream 2.0 de seus usuários termina.

  2. Os scripts de encerramento de sessão são iniciados.

  3. Os scripts de encerramento de sessão terminam ou atingem o tempo limite.

  4. O logout de usuário do Windows ocorre.

  5. Um ou os dois itens a seguir ocorrem em paralelo, se aplicável:

    • Se a persistência das configurações de aplicações estiver habilitada para os usuários, o arquivo VHD das configurações de aplicações que armazena as personalizações dos usuários e as configurações do Windows será desmontado e carregado em um bucket do Amazon S3 em sua conta.

    • Se o armazenamento persistente estiver habilitado para os usuários, o conector de armazenamento fará uma sincronização final e será desmontado.

  6. A instância de frota é encerrada.

Criar e especificar scripts de sessão

Você pode configurar e especificar scripts de sessão para frotas sempre ativas, sob demanda e elásticas.

Como configurar e especificar scripts de sessão para frotas sempre ativas e sob demanda
  1. Abra o console AppStream 2.0 em https://console.aws.amazon.com/appstream2.

  2. No painel de navegação, selecione Images (Imagens), Image Builder (Criador de imagens).

  3. Escolha um criador de imagens que esteja no estado Running (Em execução) e selecione Connect (Conectar).

  4. Quando solicitado, escolha Administrator (Administrador).

  5. Navegue até C:\AppStream\SessionScripts e abra o arquivo de configuração config.json.

    Para obter mais informações sobre parâmetros de script de sessão, consulte Arquivo de configuração de scripts de sessão.

  6. Depois de fazer as alterações, salve e feche o arquivo config.json.

  7. Na área de trabalho do construtor de imagens, abra o Assistente de Imagens.

  8. (Opcional) Especifique todas as outras aplicações que deseja incluir na imagem.

  9. Siga as etapas necessárias no Image Assistant para concluir a criação da sua imagem.

    Se a configuração de scripts de sessão não puder ser validada (por exemplo, se o arquivo .json não estiver formatado corretamente), você será notificado quando escolher Disconnect and create image (Desconectar e criar imagem).

    nota

    Para encontrar o arquivo de configuração dos scripts de sessão para construtores de imagens baseados em Linux, navegue até /opt/appstream/SessionScripts/config.json.

Como configurar e especificar scripts de sessão para frotas elásticas
  1. Crie um arquivo zip que contém os scripts de sessão e o arquivo config.json. Os arquivos de scripts serão copiados para os locais a seguir. Você deve usar esses locais para o arquivo config.json.

    • Para Windows, use C:\AppStream\SessionScripts\SessionScript.

    • Para Linux, use /opt/appstream/SessionScripts/SessionScript.

    nota

    Para executar os arquivos de script de sessão, garanta que o arquivo .zip contenha somente os scripts de sessão e os arquivos config.json, e não a pasta que os contém. Para ter mais informações, consulte Arquivo de configuração de scripts de sessão.

  2. Faça upload do arquivo zip em um bucket do Amazon S3 em sua conta.

    nota

    Sua VPC deve fornecer acesso ao bucket do Amazon S3. Para ter mais informações, consulte Usando endpoints VPC do Amazon S3 para recursos 2.0 AppStream .

    Você deve ter seu bucket S3 e sua frota AppStream 2.0 no mesmo Região da AWS.

    Você deve ter permissões do IAM para realizar a ação S3:GetObject no objeto dos scripts de sessão no bucket do Amazon S3. Para saber mais sobre como armazenar os scripts de sessão em um bucket do Amazon S3, consulte Armazenar o ícone da aplicação, o script de configuração, o script de sessão e o VHD em um bucket do S3.

  3. Abra o console AppStream 2.0 em https://console.aws.amazon.com/appstream2.

  4. No painel de navegação, escolha Fleets.

  5. Escolha uma frota elástica para atualizar, depois selecione Exibir detalhes.

  6. Na guia Configurações de scripts de sessão, escolha Editar.

  7. Em Objeto de scripts de sessão no S3, insira o URI do S3 que representa o objeto dos scripts de sessão ou escolha Procurar no S3 para navegar até seus buckets do S3 e encontrar o objeto dos scripts de sessão.

  8. Quando terminar de fazer as alterações, escolha Salvar alterações.

  9. Os scripts de sessão já estão disponíveis para todas as instâncias de frota lançadas.

    nota

    Você também pode configurar os scripts da sessão ao criar uma frota elástica.

Arquivo de configuração de scripts de sessão

Para localizar o arquivo de configuração dos scripts de sessão em uma instância do Windows, navegue até C:\\ AppStreamSessionScripts\ config.json. Em uma instância Linux, navegue até /opt/appstream/ SessionScripts /config.json. O arquivo é formatado da maneira a seguir.

nota

O arquivo de configuração está no formato .json. Verifique se qualquer texto que você digitar nesse arquivo está no formato .json válido.

{ "SessionStart": { "executables": [ { "context": "system", "filename": "", "arguments": "", "s3LogEnabled": true }, { "context": "user", "filename": "", "arguments": "", "s3LogEnabled": true } ], "waitingTime": 30 }, "SessionTermination": { "executables": [ { "context": "system", "filename": "", "arguments": "", "s3LogEnabled": true }, { "context": "user", "filename": "", "arguments": "", "s3LogEnabled": true } ], "waitingTime": 30 } }

Você pode usar os seguintes parâmetros no arquivo de configuração de scripts de sessão.

SessionStart/SessionTermination

Os scripts de sessão devem ser executados no evento de sessão apropriado com base no nome do objeto.

Tipo: string

Obrigatório: não

Valores permitidos: SessionStart, SessionTermination

WaitingTime

A duração máxima dos scripts de sessão em segundos.

Tipo: inteiro

Obrigatório: não

Restrições: a duração máxima é de 60 segundos. Se os scripts de sessão não forem concluídos dentro desse período, eles serão interrompidos. Se você precisar que um script continue em execução, inicie-o como um processo separado.

Executáveis

Os detalhes dos scripts de sessão para executar.

Tipo: string

Obrigatório: Sim

Restrições: o número máximo de scripts que podem ser executados por evento de sessão é 2 (um para o contexto do usuário e um para o contexto do sistema).

Contexto

O contexto no qual executar o script de sessão.

Tipo: string

Obrigatório: Sim

Valores permitidos: user, system

Nome do arquivo

O caminho completo para o script de sessão a ser executado. Se esse parâmetro não for especificado, o script de sessão não será executado.

Tipo: string

Obrigatório: não

Restrições: o comprimento máximo do nome do arquivo e do caminho completo é 1.000 caracteres.

Valores permitidos:.bat,.exe, .sh

nota

Você também pode usar PowerShell arquivos do Windows. Para ter mais informações, consulte Usando PowerShell arquivos do Windows.

Arguments (Argumentos)

Os argumentos do script de sessão ou arquivo executável.

Tipo: string

Obrigatório: não

Restrições de tamanho: o comprimento máximo é de 1.000 caracteres.

S3 LogEnabled

Quando o valor desse parâmetro for definido como True, um bucket do S3 será criado em sua conta da Amazon Web Services para armazenar os logs criados pelo script de sessão. Por padrão, esse valor é definido como True. Para obter mais informações, consulte a seção Registro da saída do script de sessão mais adiante neste tópico.

Tipo: booliano

Obrigatório: não

Valores permitidos: True, False

Usando PowerShell arquivos do Windows

Para usar PowerShell arquivos do Windows, especifique o caminho completo para o PowerShell arquivo no filename parâmetro:

"filename": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",

Em seguida, especifique seu script de sessão no parâmetro arguments:

"arguments": "-File \"C:\\path\\to\\session\\script.ps1\"",

Por fim, verifique se a Política de PowerShell Execução permite que seu PowerShell arquivo seja executado.

Registro da saída do script de sessão

Quando essa opção está habilitada no arquivo de configuração, o AppStream 2.0 captura automaticamente a saída do script de sessão que é gravado na saída padrão. Essa saída é carregada em um bucket do Amazon S3 em sua conta. Você pode analisar os arquivos de log para solução de problemas ou para fins de depuração.

nota

Os arquivos de log são carregados quando o script de sessão retorna um valor ou o valor definido em WaitingTime é atingido, o que ocorrer primeiro.

Usar conectores de armazenamento com scripts de sessão

Quando os conectores de armazenamento AppStream 2.0 estão habilitados, eles começam a ser montados quando os scripts de início da sessão são executados. Se seu script depende da montagem dos conectores de armazenamento, você pode esperar que os conectores estejam disponíveis. AppStream 2.0 mantém o status de montagem dos conectores de armazenamento no registro do Windows em instâncias do Windows, na seguinte chave:

<provided user name>HKEY_LOCAL_MACHINE\ SOFTWARE\ Amazon\\ Storage\\ AppStream <Storage connector>

Os valores de chave de registro são os seguintes:

  • Nome de usuário fornecido: o ID de usuário fornecido por meio do modo de acesso. Os modos de acesso e um valor para cada modo são os seguintes:

    • Grupo de usuários: o endereço de e-mail do usuário.

    • URL de streaming: o UserID.

    • SAML: o NameID. Se o nome do usuário incluir uma barra (por exemplo, o SAM de um usuário do domínioAccountName), a barra será substituída por um caractere “-”.

  • Conector de armazenamento: o conector habilitado para a opção de armazenamento persistente do usuário. Os valores de conector de armazenamento são os seguintes:

    • HomeFolder

    • GoogleDrive

    • OneDrive

Cada chave de registro do conector de armazenamento contém um valor MountStatusDWORD. A tabela a seguir lista os valores possíveis para MountStatus.

nota

Para visualizar essas chaves de registro, é necessário ter o Microsoft .NET Framework versão 4.7.2 ou posterior instalado em sua imagem.

Value Descrição
0

Conector de armazenamento não ativado para esse usuário

1

A montagem do conector de armazenamento está em andamento

2

Conector de armazenamento montado com êxito

3

Falha na montagem do conector de armazenamento

4

A montagem do conector de armazenamento está habilitada, mas ainda não ocorreu

Em instâncias Linux, você pode verificar o status de montagem da pasta inicial observando o valor de appstream_home_folder_mount_status no arquivo ~/.config//-status. appstream-home-folder appstream-home-folder-mount

Value Descrição
Verdadeiro

Pasta base montada com sucesso

Falso Pasta base ainda não está montada

Habilitar o armazenamento de buckets do Amazon S3 para logs de script de sessão

Quando você ativa o registro do Amazon S3 na configuração do script da sessão, o AppStream 2.0 captura a saída padrão do script da sessão. A saída é carregada periodicamente em um bucket do S3 na sua conta da Amazon Web Services. Para cada AWS região, AppStream 2.0 cria um bucket em sua conta que é exclusivo para sua conta e para a região.

Você não precisa executar tarefas para gerenciar esses buckets do S3. Eles são totalmente gerenciados pelo serviço AppStream 2.0. Os arquivos de log armazenados em cada bucket são criptografados em trânsito usando endpoints SSL do Amazon S3 e em repouso usando chaves de criptografia gerenciadas pelo Amazon S3. Os buckets são nomeados em um formato específico da seguinte forma:

appstream-logs-region-code-account-id-without-hyphens-random-identifier
region-code

Esse é o código da AWS região em que a pilha é criada com o armazenamento de bucket do Amazon S3 habilitado para logs de script de sessão.

account-id-without-hyphens

O identificador de sua conta da Amazon Web Services. O ID aleatório garante que não haja conflitos com outros buckets na região. A primeira parte do nome do bucket, appstream-logs, não é alterada entre contas ou regiões.

Por exemplo, se você especificar scripts de sessão em uma imagem na região Oeste dos EUA (Oregon) (us-west-2) na conta número 123456789012, AppStream 2.0 cria um bucket Amazon S3 dentro da sua conta nessa região com o nome exibido. Somente um administrador com permissões suficientes pode excluir esse bucket.

appstream-logs-us-west-2-1234567890123-abcdefg

Desabilitar os scripts de seção não exclui nenhum arquivo de log armazenado no bucket do S3. Para excluir permanentemente os arquivos de log, você ou outro administrador com permissões adequadas deve fazer isso usando o console ou a API do Amazon S3. AppStream 2.0 adiciona uma política de bucket que evita a exclusão acidental do bucket. Para obter mais informações, consulte a seção Políticas do IAM e do bucket da Amazon S3 para persistência de configurações do aplicativo em Identity and Access Management para Amazon AppStream 2.0.

Quando os scripts de sessão são habilitados, uma pasta exclusiva é criada para cada sessão de streaming que é iniciada.

O caminho para a pasta em que os arquivos de log são armazenados no bucket do S3 em sua conta usa a seguinte estrutura:

bucket-name/stack-name/fleet-name/access-mode/user-id-SHA-256-hash/session-id/SessionScriptsLogs/session-event
nome-do-seu-bucket

O nome do bucket do S3 no qual os scripts de sessão são armazenados. O formato do nome é descrito anteriormente nesta seção.

stack-name

O nome da pilha da qual a sessão veio.

fleet-name

O nome da frota em que o script de sessão está sendo executado.

access-mode

O método de identidade do usuário: custom para a API ou CLI AppStream 2.0, federated para SAML e userpool para usuários no grupo de usuários.

user-id-SHA-256-hash

O nome da pasta específica do usuário. Esse nome é criado usando um hash hexadecimal SHA-256 em minúsculas gerado a partir da string de identificador de usuário.

session-id

O identificador da sessão de streaming do usuário. Cada sessão de streaming de usuário gera um ID exclusivo.

session-event

O evento que gerou o log de script de sessão. Os valores de evento são: SessionStart e SessionTermination.

A estrutura da pasta de exemplo a seguir aplica-se a uma sessão de streaming iniciada na pilha de teste e na frota de teste. A sessão usa a API do ID do usuáriotestuser@mydomain.com, de um Conta da AWS ID de123456789012, e o grupo de configurações test-stack na região Oeste dos EUA (Oregon) (us-west-2):

appstream-logs-us-west-2-1234567890123-abcdefg/test-stack/test-fleet/custom/a0bcb1da11f480d9b5b3e90f91243143eac04cfccfbdc777e740fab628a1cd13/05yd1391-4805-3da6-f498-76f5x6746016/SessionScriptsLogs/SessionStart/

Essa estrutura de pasta de exemplo contém um arquivo de log para um script de início de sessão do contexto do usuário e um arquivo de log para um script de início de sessão do contexto do sistema, se aplicável.

Use scripts de sessão em frotas com várias sessões

Ao usar scripts de sessão em frotas com várias sessões, há requisitos e considerações adicionais para garantir desempenho e segurança ideais.

Requisitos

Em uma frota de sessão única, em uma determinada instância, é garantido que os SessionTerminationganchos SessionStarte funcionem apenas uma vez. Isso ocorre porque há um mapeamento 1:1 das sessões para as instâncias. Ao usar frotas de várias sessões, há um mapeamento N:M de sessões para instâncias, em que cada sessão é executada por conta própria e gancho. SessionStartSessionTermination Isso significa que os SessionTerminationganchos SessionStarte podem ser executados várias vezes em uma determinada instância e em muitas ordens diferentes. Para obter a melhor experiência, o seguinte deve ser válido para seus scripts de sessão quando usados em frotas de várias sessões:

  • Os scripts são idempotentes.

    Quando uma ação já foi executada, os scripts devem lidar com mais de uma execução na mesma instância com um tratamento adequado.

  • Os scripts são independentes.

    Como os scripts são executados por sessão, se uma sessão estiver sendo executada SessionTerminationenquanto outra estiver em execução SessionStart, eles não devem interferir entre si ou com a experiência de outras sessões.

  • Os scripts são performantes.

    Em instâncias de várias sessões, várias sessões podem ser provisionadas simultaneamente. Isso significa que pode haver várias execuções simultâneas dos scripts da sessão. Os scripts devem ser eficientes, não consumir recursos excessivos e não afetar a experiência de outros usuários na instância ou a estabilidade das sessões.

Muitos desses requisitos podem ser atendidos mantendo a lógica do script de sessão focada na sessão específica do usuário para a qual o script está sendo executado.

Considerações sobre segurança

AppStream As imagens 2.0 não devem ser configuradas para permitir a permissão de gravação em arquivos de script de sessão por nenhum usuário. Isso introduz um vetor de ataque crítico para usuários mal-intencionados, onde eles podem modificar arquivos de script. Esses arquivos podem então ser executados como SYSTEM ou outro usuário, dependendo da sua configuração.

Importante

É sua responsabilidade garantir que suas imagens AppStream 2.0 estejam configuradas com segurança. Isso é especialmente importante para instâncias de várias sessões, nas quais vários usuários estão usando a mesma instância. Se as imagens não forem configuradas com segurança, há um risco de segurança para todos os usuários dessa instância.

O seguinte deve ser válido para seus arquivos de imagens e scripts de sessão:

  • Os usuários não têm permissão para modificar arquivos de script de sessão.

  • Os usuários não têm permissão para modificar o script de sessão config.json. O comportamento padrão na imagem restringe o acesso aos administradores.

Os executáveis dos scripts de sessão devem ser armazenados em um local seguro, onde estejam protegidos contra modificações em tempo de execução.

Se o serviço detectar que um script de sessão executável foi modificado, ele falhará em qualquer execução subsequente desse hook nessa instância, fará o upload dos arquivos de log para o Amazon S3 (se o registro no Amazon S3 estiver ativado) e você verá a seguinte mensagem:

O script da sessão não foi executado porque o executável foi modificado após o provisionamento da instância. A execução foi ignorada por motivos de segurança.

Se seu caso de uso exigir a modificação do executável do script de sessão em tempo de execução (por exemplo, se você apontar para um arquivo EXE modificado por um processo de atualização automática em tempo de execução), isso falhará nas verificações acima. Nesse caso, use um script para redirecionar a execução para o executável modificado. Deixe o script inalterado em tempo de execução quando o serviço realizar verificações de segurança.

Se seus arquivos de script de sessão forem excessivamente grandes (mais de 100 MB), isso pode causar atrasos no provisionamento da instância e da sessão, e as verificações de segurança levarão mais tempo (dependendo do tipo de instância e dos recursos disponíveis). Se seu caso de uso exigir scripts de sessão grandes, considere usar scripts menores para redirecionar a execução. Isso melhorará as experiências de provisionamento de instâncias e sessões.

Observe que o serviço está verificando apenas o executável definido nos scripts de sessão config.json, e esse é apenas um mecanismo alternativo/melhor esforço. É sua responsabilidade garantir que todos os caminhos de código nos executáveis dos scripts de sessão sejam seguros e não possam ser modificados pelos usuários finais.