Your technology website

 

Compartilhando Sessão entre aplicações CAKEPHP

Quando trabalhamos na área de desenvolvimento de software, fatalmente há situações onde suas aplicações precisam "conversar" umas com as outras. Em muitas destas ocasiões, um determinado SITE B, recebe um visitante que necessita estar devidamente autenticado pelo SITE A. Através deste pequeno tutorial, explicarei como realizar este procedimento utilizando o framework CakePHP, com o qual tenho trabalhado intensamente nos últimos meses, obtendo notáveis índices de sucesso e integração da equipe e aplicações.

Suponhamos que temos duas aplicações, onde a primeira (SITE A) possui toda a implementação de validação de login e senha, e que somente por ela será possível que o usuário realize a autenticação com suas respectivas informações de acesso, e uma segunda (SITE B), que eventualmente este mesmo usuário terá acesso, no entanto, conforme já explicado, este terá de estar autenticado através do SITE A.

O que precisamos fazer para que estas duas aplicações conversem e atendam ao nosso contexto, será necessário inicialmente alterar algumas configurações no core.php de um ou ambos os sites para que possamos dizer ao SITE B, que utilize a sessão criada pelo SITE A, informando a SESSION ID.

Vamos ao passo a passo:

  1. No core.php do SITE B, altere o Security.level para low. (Valores como High e Medium irão invalidar a sessão recebida, e não teremos sucesso em nosso processo).
  2. Utilize o mesmo método de armazenamento da sessão das duas aplicações, para que utilizem o mesmo local. Isso poderá ser feito alterando o Session.save. Os valores permitidos são: php ou database. (Este valor deverá ser o mesmo tanto em SITE A quanto SITE B) (Note que o padrão de todas as aplicações é php).
  3. Utilize o mesmo hash do Security.salt em ambas as aplicações. (Copie o valor do hash Security Salt do SITE A p/ SITE B ou vice versa, de forma que fiquem iguais)

 

Após realizar os três passos supra citados no core.php, nossos aplicativos estarão prontos para compartilhar a sessão, no entanto, ainda há a necessidade de implementar pequenas modificações no app_controller.php do SITE B, para que esta receba via parâmetros URL, o valor da sessão a ser utilizada.

Crie o método beforeFilter() no app_controller.php do SITE B conforme abaixo (caso não o tiver):

 

function beforeFilter() {
if (!empty($this->params['url']['sid'])) {
$this->Session->id($this->params['url']['sid']);
}
}

Feito isso, temos o SITE B totalmente preparado para receber a sessão que vier de SITE B através do parâmetro sid. (Utilizamos sid, no entanto poderá ser qualquer nome que seja definido para o índice do vetor $this->params.

Agora para que o procedimento funcione, basta passarmos por URL para o SITE B, o SESSION ID da sessão gerada pelo SITE A. Como o valor da SESSION ID é diferente para cada usuário logado, utilizamos o próprio método do CakePHP para obter o valor dentro de um link por exemplo:

echo $html->link('Ir ao SITE B', "http://enderecoSiteB/usuarios/index?sid=" . $session->id() );

A partir de agora, toda vez que o usuário, no SITE A clicar no Link, o código da sessão será passado. O SITE B por sua vez, receberá este valor e passará a trabalhar com estas informações e suas aplicações estarão devidamente integradas.

Esta é uma forma simples e rápida de resolver o problema da integração de sessão entre aplicações CakePHP, no entanto, quem quiser uma forma ainda mais segura para realizar o mesmo processo, recomendo também este artigo de SOTA, http://jamnite.blogspot.com/2009/03/more-secure-way-to-transfer-session.html .

 

 



Postado por: Thiago Elias em 22/01/2010

| Mais



Voltar

Comentar este artigo





Comentários: (5)

Jeremias diz:
Muito louco, só não funciona!!!
Thiago Elias diz:
Claro que funciona Janlon. Tu que não soube fazer.. hehe
Isaac Lima diz:
Gostei do seu Vendas Palm. mas , como faço pra cadastrar produto no estoque ,
ja tentei de todas as formas e nada
grato
Jackson Santos diz:
Boa noite,

Sou estudante de redes de computadores e pesquisando um programa para um palm, encontrei o seu programa de vendas, o vendas4palm 1.4.1.1, de primeiro não consegui instalar pois não tinha trabalhando ainda com esse tipo de equipamento, agora gostaria de saber como eu faço pra sincronizar ele com o meu micro, o equipamento que tenho é um Palm Tungsten E2, e o sistema operacional é o Windows XP SP3.

Sem mais agradeço a atenção e aguardo uma resposta sua

Jackson Santos.
Jeremias diz:
Original: Estou até sem jeito, mas é verdade, vc tem razão, por um erro do meu Ctrl + C; Ctrl + V o Security.salt estava diferente do Portal. O código realmente funciona! Me perdoe! Agora esse seu capcha ta foda, vou aproveitar e vou testar o meu Ctrl + C; Ctrl + V pra ver se o PC não erra mais.

Cópia: Estou até sem jeito, mas é verdade, vc tem razão, por um erro do meu Ctrl + C; Ctrl + V o Security.salt estava diferente do Portal. O código realmente funciona! Me perdoe! Agora esse seu capcha ta foda, vou aproveitar e vou testar o meu Ctrl + C; Ctrl + V pra ver se o PC não erra mais.

É parece que esta funcionando!