Ir para conteúdo
Master_Cyber

Compartilhar session entre subdomínios

Recommended Posts

Bom dia galera,

 

estou trabalhando em um projeto que consiste em dois sistemas, um em PHP/Ajax e o outro em Angular 5, ambos fazem requisição em um webservice (Apigility). O banco é postgres.

 

A questão é que quando a pessoa logar na tela de login sistema PHP, ele automaticamente logue no sistema Angular, que basicamente a "session" é guardada no localstorage.

 

Então pensei em trabalhar com session para compartilhar token e dados do usuário.

 

O problema é que não consigo compartilhar a mesma session entre o sistema e o webservice, nem o localstorage é compartilhado.

 

Estou bastante confuso como resolver isso..

 

Pensei em colocar os dados da session no banco de dados também.

 

Podem me ajudar? Dar outras soluções?

 

Obrigado.

 

OBS: Todos os sistemas (api, sistema php e angular) envolvidos estão no mesmo servidor, mas em subdomínios diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como funcionaria essa sessão no banco?

 

Eu guardaria a session_id no banco, mas no outro sistema, a session_id já é outra...

 

Como eu localizo o registro do cara?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Master_Cyber, tranquilo?

 

Como você está lidando com API REST e SPA, o mais apropriado seria manter as requisições à sua API independentes de estado (stateless). E isso você consegue abrindo mão do uso de sessions/cookies. Esse é definitivamente o caminho mais apropriado para o seu caso.

Nesse caso você deveria implementar um processo de autenticação baseado em OAuth / OAuth2 e similares ou JWT token.

 

Bom, antes de qualquer coisa, qual é a diferença entre uma mecânica e outra?

1 - Com sessões/cookies você precisa armazenar as informações relacionadas a cada sessão dos usuários em arquivos separados no servidor (e no cliente também). Quando você lida com instâncias (máquinas) únicas de servidores isso é simples: as sessões ficam por padrão na pasta /tmp (em servidores Linux), mas isso varia da configuração da sua hospedagem.

 

Quando a demanda de sua aplicação cresce, você precisa escalar essas sessões, ou seja, torná-las acessíveis em mais de uma máquina, para que as requisições podem ser respondidas regularmente, independente de qual máquina é requisitada.

Outro cenário é o que você está passando, onde duas aplicações distintas precisam ter conhecimento sobre as sessões dos usuários.

 

Como resolver isso utilizando sessões? Bom, para o primeiro caso (escalabilidade) existem sticky sessions, mas não é o seu caso e não é a melhor solução de qualquer forma.

Você também pode simplesmente inserir as sessões em outro lugar (como um banco de dados ou um serviço de cache). E isso é bem simples de ser feito. Veja um exemplo na AWS com DynamoDb. Essa seria uma solução.

 

O problema é que utilizar sessões não é o melhor caminho para SPAs e inclusive nem está documentado pela Apigility que você citou.

 

2 - Com JWT ou OAuth não existe estado, nem sessões, mas existem várias chaves que devem ser trafegadas com o objetivo de autenticar (verificar identidade) e autorizar (verificar permissões/acesso) os usuários.

Após o processo de login, o usuário terá uma chave, que deve ser armazenado pela sua SPA em localStorage (ou outra forma) e enviado em toda e qualquer requisição que exija acesso privilegiado.

Você encontra toda a documentação de como fazer isso aqui (navegue no menu lateral): https://apigility.org/documentation/auth/intro

 

Resumindo: no seu caso, basta estudar e seguir o que é explicado nesse último link para autenticar os usuários.

 

Não quis complicar muito explicando como funcionam as requisições a fundo (especificações HTTP e cada etapa de ambos os processos), mas caso queira se aprofundar mais, esse material é excelente: https://ponyfoo.com/articles/json-web-tokens-vs-session-cookies

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nossa cara, muito obrigado pela explicação... Me ajudou muito, vou estudar a melhor solução para minha situação..

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por patriciahelena
      Boa noite,
       
      Preciso de ajuda.
      No arquivo form.php tenho 3 inputs de entrada(valor1, valor2, valor3) e 3 inputs(disabled) que receberão os valores calculados do arquivo form_matematico5.php.
      Na tag form onsubmit="return calcula()"
       
          <h4 class="calcula"></h4>
       
      <script>
      function calcula($volmedio, $temp, $precogas) {
      $.get("form_matematico5.php", $('#calculorecovap').serialize(),
          function(data){
              $('.calcula').html(data);
          }
      );
      return false;
      }
      </script>
       
       
      No arquivo form_matecatico5.php é feito os calculos gerando 3 valores. 
      Tenho um echo:
      echo 'texto<br><div style=font-size:23px;color:red;>' . number_format($Resultado1,0,",","."). '</div> <br> texto<br><div style=font-size:23px;color:red;>'. number_format($Resultado2,0,",","."). '</div> <br>texto<br><div style=font-size:23px;color:red;>R$ '. number_format($Resultado3,2,",","."). '</div>';
       
      Ele retorna o echo certinho em     <h4 class="calcula"></h4>.
      Mas o que eu quero mesmo é que Resultado1 retorne dentro do primeiro input(disabled), o Resultado2 dento do segundo input(disabled) e assim com o terceiro. Ou seja,
      Cada input(disabled), recebera um valor diferente e não o total de .calcula.
       
      Espero ter explicado direitinho,
      Obrigada
       
       
       
       
       
       
       
    • Por luisfeliperm2
      Estou criando um sistema de login e cadastro de um jogo em php. Conectei ao postgresql e agora estou com um problema. Preciso saber qual criptografia é utilizada. Todas as hashs possuem 32 caracteres e por isso pensei que fosse MD5. Mas não é.
      password - > 62f9f2022536274b47f4daa0887361cf
      teste1 -> deaafc806aef00d0262e098ff089fff1
      Outras senhas criptografadas:
      59a93faaaf6d43ca4c3ef9ec183200ea
      47d163c4e9388dfd4b2dc7c327a33761
      8dffc56f2382d0f5552c04d9fa014d0e
    • Por raphael123
      Estou tentando realizar um insert no banco e está ocorrendo esse erro ao clicar em salvar. Poderiam me ajudar a solucionar esse problema, estou utilizando a linguagem PHP, segue o erro e meu código abaixo.
       


       
      <?php 
       
      $ieqbairro = $_POST['ieqbairro'];
      $pastor = $_POST['pastor'];
      $lider = $_POST['lider'];
      $celulaAtivas = $_POST['celulasativas'];
      $participantes = $_POST['participantescelulas'];
      $quantidade = $_POST['quantidadereunioes'];
      $quantmensais = $_POST['quantidadeensaiosmensais'];
      $diaensaio = $_POST['diaensaio'];
      $hora = $_POST['horaensaio'];
      $totalmenbrosminis = $_POST['totalmembrosdepartamento'];
      $vocal = $_POST['vocal'];
      $mulhercontralto = $_POST['mulhercontralto'];
      $mezzosoprano = $_POST['mezzosoprano'];
      $soprano = $_POST['soprano'];
      $homensbaixo = $_POST['homensbaixo'];
      $baritono = $_POST['baritono'];
      $tenor = $_POST['tenor'];
      $guitarra = $_POST['guitarrista'];
      $baterista = $_POST['bateristas'];
      $tecladista = $_POST['tecladistas'];
      $violao = $_POST['violao'];
      $baixo = $_POST['baixistas'];
      $meialua = $_POST['meialua'];
      $cajon = $_POST['cajon'];
      $outros = $_POST['outros'];
      $ministeriodecarreira = $_POST['ministeriocarreira'];
      $descrinomemstcarreira = $_POST['nomeministeriocarreira'];
      $connect = mysqli_connect('localhost','root','') or die('Erro ao conectar ao banco de dados');
      $db = mysqli_select_db($connect,'1regiao');
      mysqli_set_charset($connect,'utf8');
      $query = mysqli_query($connect,"INSERT INTO tbfichacadadanca (ieqbairro, pastor, lider, celulaAtivas, participantescelulas,
      quantidadecelulas, quantidaensamensal, diaensaio, horaensaio, totalmenbrosminis, vocalquant, mulhercontralto, mulhermezzosoprano, mulhersoprano, homensbaixo, homensbaritono, homenstenor, guitarraqtd, bateristaqtd, tecladistaqtd, violaoqtd, baixoqtd, meialuaqtd, cajonqtd, outros, ministeriodecarreira, descrinomemstcarreira,) VALUES ('$ieqbairro','$pastor','$lider', '$celulaAtivas', '$participantes','$quantidade', '$quantmensais','$diaensaio', '$hora', '$totalmenbrosminis','$vocal', '$mulhercontralto','$mezzosoprano', '$soprano','$homensbaixo', '$baritono','$tenor', '$guitarra','$baterista', '$tecladista','$violao', '$baixo','$meialua', '$cajon','$outros', '$ministeriodecarreira','$descrinomemstcarreira')") or die mysqli_error($query); 
       
      if($query){
             echo"<script language='javascript' type='text/javascript'>alert('Dados Salvos com sucesso!');window.location.href='fichacadastral1regiaodanca.html'</script>";
          }
                
      mysqli_close($connect);
      ?>

    • Por caioandreis
      Olá, pessoal. Tudo bem?
      Gostaria de pedir um direcionamento com a seguinte situação:
       
      Tenho um amigo que tem um site feito em php, com painel gerenciador de conteúdo. Como estou estudando mais a fundo php agora, gostaria de pegar um site que funciona e estudar em cima dele: (alterar tanto layout quanto incluir/retirar novas funcionalidades).
       
      Meu amigo liberou o acesso ao ftp e banco de dados dele, para eu fazer uma cópia e colocar em um localhost (xampp) para estudar em cima dele. Assim, não corro risco de danificar o site dele que está no ar.
       
      Já estou com a pasta do site dentro do htdocs, e o banco de dados importado no phpmyadmin, porém ao tentar acessar o site, o browser acusa erro no servidor. 500
       
      Busquei tutoriais sobre isso, mas encontrei apenas passo-a-passo para sites em wordpress. Com isso, vem a pergunta:
       
      Alguém tem algum tutorial ou poderia me dizer como faço para "plugar" o site com o banco de dados no localhost? 
       
      Peço desculpas se a pergunta é muito leiga mas, como não encontrei nada específico sobre o assunto, achei que valia a tentativa.
       
      Desde já, agradeço pela atenção.
       
      Caio
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.