Pergunta

Eu fazer uma requisição AJAX para ver se uma sessão variável tenha sido definida.Eu fazer uma solicitação GET para este script:

<?php session_start();

while(true){
    if(isset($_SESSION['screen_name'])){
        return true;
        break;
    }
}

?>

Claramente, existem problemas com este script e eu queria resolver estes problemas, tais como a contínua verificação e o desperdício de recursos.

Cenário:Estou tentando implementar o método oAuth twitgoo tenho usado.Você clique em "sign in" e, em seguida, uma janela pop-up para você entrar no twitter.Se você for bem sucedido, o twitter redireciona para uma chamada de volta URL (o que eu acho os conjuntos de informações de sessão) e a janela é fechada.Uma vez feito isso, a sua mensagem é postado no twitter.Eu estou tentando conseguir isso e estou quase lá, mas eu tenho certeza do meu script acima.

Gostaria muito de receber qualquer tipo de ajuda em fazer esse script não tão desperdício e se você tiver um melhor implementação, Eu gostaria de ouvi-lo.

Obrigado a todos

Atualização

Eu tenho sido dar duas boas opções que você acha que é mais eficiente entre:

1) Consulta o servidor a cada poucos segundos, usando JS, em vez de durante o ciclo de comer ciclos de CPU

2) Mantenha o loop while, mas a "facilidade" um sobre o nível de conferir significado não mais solicitações http será desperdiçado

Foi útil?

Solução

Este é um script PHP? Existe alguma condição que possa mudar o estado de $_SESSION['screen_name'] além de uma página de atualização/nova pesquisa, ou seja, um reiniciar o script em primeiro lugar?

o $_SESSION A variável depende da solicitação. Não vai mudar enquanto o script é executado, a menos que seja alterado pelo script. Tudo o que esse script faz é retornar true Se a condição for atendida ou loop até que o tempo limite seja atingido. A condição é verdadeira na primeira tentativa ou nunca será.

Outras dicas

Infelizmente, tudo o que você criou aqui é um loop infinito.Se $_SESSION['screen_name'] não está definida a primeira vez, nunca, nunca vai estar.Uma vez que você tiver carregado um script PHP, as variáveis de ambiente não vai mudar.Você nunca vai receber outro cookie de sessão, nem qualquer de $_GET, $_POST, $_SESSION, etc.nunca ser modificado, a menos que você fazê-lo explicitamente dentro do script, ou o script termina e você faça outro pedido.

Minha sugestão, aqui, seria algo como isto:

if(isset($_SESSION['screen_name'])){
    return true;
    break;
}
else {
  //output JSON encoded error message
}

Se você sair do seu script quando necessário variável de sessão não está definido e enviar uma resposta de volta para o browser, em seguida, o navegador pode decidir o que fazer.Talvez fazer outro pedido, talvez espere dez segundos, talvez carregar uma caixa de diálogo logon.

Eu posso estar dizendo algo realmente estúpido aqui, mas você não seria melhor, apenas dando o loop enquanto deixaria as pesquisas para JavaScript?

Armazene seu resultado em memcache e use o loop while com o USLEEP () entre as iterações que verificam o Memcache para a variável.

Isso permitirá que você faça uma pesquisa longa, em vez de ter que acorrentar um monte de xmlHttPrequests aguardando o resultado.

Que tal agora:

screen_name_check.php

<?php session_start();
if (isset($_SESSION['screen_name']))
    return "1";
return "0";
?>

página.html

<script type="text/javascript">
    check_screen_name_interval = window.setIterval(function(){
        // AJAX call screen_name_check.php
        if (data=="1") {
        window.clearInterval(check_screen_name_interval);
        // do whatever JS needs with that session set
        // or AJAX call a different PHP page like screen_name_is_set.php
        }
    }, 2000);
</script>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top