quarta-feira, 8 de agosto de 2012

Verificando se o usuário está autenticado em outro servidor

Tenho um script PHP que está rodando no servidor X. Esse script varia seu comportamento dependendo de o usuário estar autenticado ou não. Porém, o servidor de autenticação é um servidor Y. Como saber em X se o usuário está autenticado em Y? Sem enrolação: o script em questão precisa fazer um session_start() e tem que ter a seguinte linha:
<script src="http://servidorX/verifica_login.php?i=<?= session_id(); ?>" type="text/javascript">

O script verifica_login.php só precisa do seguinte:

$url = "http://servidorY/ajusta_sessao_ok.php?i=" . $_REQUEST['i'];
if(<aqui vem a regra que verifica se o usuário está autenticado em Y>)
{
    $content = file_get_contents($url);
}
else
{
    $url .= "&d=s";
    $content = file_get_contents($url);
}

Já o script ajusta_sessao_ok.php precisa estar no servidor Y:

$id = session_id(trim($_REQUEST['i']));
session_start();
if($_REQUEST['d'] == 's')
{
    unset($_SESSION['autenticacao_ok']);
}
else
{
    $_SESSION['autenticacao_ok'] = true;
}

Daí o script que tem o comportamento variando de acordo com o login do usuário precisa fazer algo do tipo:

session_start();
if($_SESSION['autenticacao_ok'])
{
    // coisas a fazer com o usuário autenticado
}
else
{
    // coisas a fazer com o usuário não autenticado
}