Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Good

[Resolvido] Estratégia para usar tabela em vários sites

Recommended Posts

Eu programei um site, e hoje já conta com +20000 usuários registrados..

 

pretendo criar mais vários sites pela frente, só que eu quero compartilhar a tabela de usuários com todos estes sites. Pra não ter a necessidade de cada usuário se registrar novamente em cada site..

 

Este site já conta com mais de 40 tabelas, então não quero colocar todas as tabelas juntas pra não misturar. Mas e se esta for a única solução? O banco de dados vai apresentar lentidão pelo motivo de ter vários sites conectando ao mesmo banco de dados, modificando frequentemente os registros das tabelas?

 

Qual seria a melhor coisa para se fazer?

 

Já vi umas empresas de jogos do exterior, que usam a mesma tabela de usuários para vários outros sites deles..

 

Ah, e não sei se postei no lugar correto.. foi o lugar mais correto que achei talvez..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça da autenticação uma espécie de serviço.

 

Você terá uma aplicação com um banco de dados e todos os sites que precisarem se autenticar,ao invés de fazer uma requisição para alguma parte específica do próprio site, fazem para um URL externo, que aponte para este serviço seu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pense em serviço, seu site que usa a tabela originalmente pode "oferecer" um serviço de autenticação para os demais sites, desta forma você não precisa pensar como vai fazer para compartilhar a base de dados, disponibiliza como serviço e pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi foi nada do que vcs disseram..

 

É um site com login e dentro há vários sistemas.. E toda página que entra, ele pega as informações da tabela de usuários.. já que no lado esquerdo, há informações da conta de usuário dele..

 

Não entendi isso de serviço de autenticação...

 

Os usuários não são obrigados a acessar os outros sites.

 

é assim que eu penso:

imagemgyn.png

http://img408.imageshack.us/img408/7348/imagemgyn.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você quer consultar um CEP, como você faz?

- Acessa o site do correios, informa os dados, clica em consultar e terá a resposta.

 

Pois é mais ou menos isto que vai acontecer, só que você substitui a pessoa por outro sistema.

- Seu site vai acessar o serviço onde esta hospedado a autenticação, informar os dados e terá a resposta se a autenticação foi bem sucedida ou não.

 

Leitura recomendada:

http://pt.wikipedia.org/wiki/Service-oriented_architecture

http://pt.wikipedia.org/wiki/Web_service

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que entendi o que você quis dizer, tipo:

siteprincipal.com => terá um arquivo assim: login.php?usuario=XXX&senha=YYY

 

site1.com => aqui o usuário informará o usuário e senha, e vai chamar a página www.siteprincipal.com/login.php?usuario=XXX&senha=YYY

 

Aí o arquivo login.php informará todos os dados do usuário: usuário, senha, email, data de nascimento, etc.

Aí eu gravo essas informações numa SESSION se o login der TRUE.

 

Aí se o usuário modificar senha, email, sei lá.. Aí é só eu chamar de novo o login.php e pronto, grava novamente na mesma SESSION.

 

É isso que você quis dizer?

 

Eu acho que tá de boa, já que vou acessar um site externo somente uma vez..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que o Prog está dizendo é que você pode criar um webservice (API)

 

 

Veja os serviços google, por exemplo, você pode logar no youtube usando uma conta google.

Isso é possível porque o google possui um websservice que compartilha com sites afiliados.

 

 

Jamais pense em enviar dados como login e senha sem codificação.

Crie uma chave pública e outra privada para fazer a codificação e decodificação entre os ambientes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim.. eu não posso fazer isso pq?

 

O usuário vai digitar o usuário e senha, aí vou fazer um pedido no site principal pra ver se ta certo ou errado.. Aí os valores que vão retornar, vai ser dados como usuário, email, data de nascimento, etc essas besteira.

 

E não vai ser mostrado nada pro usuário, a página é claro que vai ser segredo.. Vai ser mais ou menos isso:

 

login.php

array("usuario" => "Good","email" => "good@gmail.com","data_nascimento" => "15/03/1994","ultimo_login" => "17:58:00 18/11/2011");

 

Tem algum problema nisso? O pedido vai ser enviado por aquela função de abrir páginas com php, e o retorno vai ser desse tipo.. Acho que não tem problema.. Pq eu posso colocar um nome assim pra pegar esses dados: auncjznczjn44.php

e colocar dentro de pasta por pasta, etc..

 

Acho que é o jeito mais fácil mesmo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não cara, você realmente não tá entendendo como um serviço funciona.

 

Tá certo, eu não sei programar um serviço propriamente dito, mas uma plicação que atua como um serviço é mole, mole.

 

Veja, você vai ter uma aplicação SEM interface visual que vai receber informações, trabalhar com elas e retornar outras.

 

Vamos a um exemplo em PHP, pode ser?

 

Supinhamos que essa aplicação só trabalhe por POST, então naquilo que acontecerá a ação (como ummétodo de uma classe):

 

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

   // Faz alguma coisa
}

Faz alguma coisa... Mas faz o quê? O serviço vai trabalhar com base nas informações que você passar. É um serviço de autenticação? Então pelo menos usuário e senha devem existir:

 

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

   $username = ( isset( $_POST['username'] ) ? $_POST['username'] : NULL );
   $password = ( isset( $_POST['password'] ) ? $_POST['password'] : NULL );

   if( is_null( $username ) ) {

       // Retorna erro (usuário não informado)
   }

   if( is_null( $password ) ) {

       // Retorna erro (senha não informada)
   }

   // Consulta Banco de Dados

   $dbh = new PDO( /* ... */ );

   // Verifica se usuário existe

   $userInfo = $dbh -> exec( 'SELECT `username` FROM `users` WHERE `username` = "' . $username . '"' );

   if( count( $userInfo -> fetch() ) == 0 ) {

       // Retorna erro (usuário não existe)
   }

   $passInfo = $dbh -> exec( 'SELECT `password` FROM `users` WHERE `passowrd` = "' . md5( $password ) . '"' );

   if( count( $passInfo -> fetch() ) == 0 ) {

       // Mostra erro (usuário existe mas a senha está errada)
   }

   $userData = $dbh -> exec( 'SELECT * FROM `users` WHERE `username` = "' . $username . '"' );

   /**
    * Mostra informações
    *
    * echo serialize( $userData -> fetch() );
    * OU
    * echo json_encode( $userData -> fetch() );
    */
}

Bem simples, não me preocupei com performance, integridade estrutural e blah, blah, blah. Na verdade nem sei se a sintaxe está correta, fiz agora e cabeça, correndo... :yay:

 

Essas informações você pode simplesmente ecoar na tela ou retornar um XML. Ou melhor, condicionar a saída de acordo com a requisição do usuário. Se existir um parâmetro POST que altere o padrão, você "obedece".

 

Um XML de erro, por exemplo, poderia ser:

 

<SITENAME>
   <error code="123" reason="Missing required argument: USERNAME" />
</SITENAME>

Entendeu mais ou menos a idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

kk

sim, isso aí q eu tentei explicar no último post.. é feito toda a validação, e se retornar true.. vai vir todas as informações em json ou array mesmo.. aí é só "tratar" o resultado nos sites "escravos".. ta resolvido..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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