Ir para conteúdo

POWERED BY:

Arquivado

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

Nerdmonkey

Classe para chegar se usuário está logado

Recommended Posts

Boa tarde!

 

Estou estudando OO e tentando criar um classe para verificar se um usuário está logado no sistema. Por favor, criticas e sugestões de como melhorar e se estou errando em algum ponto. Ainda não testei, apenas escrevendo o código pra ver como flui

 

 

class StatusLogin()
{
private $section; 
 
/**
*
*/
function __construct( $section )
{
$section = $this->section; 
}
 
/**
* 
*/
private function checa_sessao( $section )
{
 
}
 
/**
*
*/
protected function redir()
{
if( checa_sessao( $section ) == false )
{
header( "Location: login" );
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não algo like this

 

 

<?php
class Usuario 
{
/**
* Nome do banco de dados 
*/
var $database = 'db_testes';
 
/**
* Nome da tabela
*/
var $table = 'usuarios';
 
/**
* Nome da tabela usuários
*/
var $username = 'root';
 
/**
* Nome do host de conexão
*/
var $hostname = 'localhost';
 
/**
* Senha do usuário do host de conexão
*/
var $password = '';
 
/**
* Nomes dos campos onde ficam usuário e a senha de cada usuário
* Formato: tipo => nome_do_campo
*/
var $campos = array(
'usuario' => 'usuario',
'senha' => 'senha'
);
 
/**
* Nomes dos campos que serão pegos da tabela de usuarios e salvos na sessão,
* caso o valor seja false nenhum dado será consultado
    * @var mixed
    */
var $dados = array( 'id', 'nome' );
 
/**
* Inicia a sessão se necessário?
* @var boolean
*/
var $iniciaSessao = true;
 
/**
* Prefixo das chaves usadas na sessão
* @var string
*/
   var $prefixoChaves = 'usuario_';
 
/**
    * Usa um cookie para melhorar a segurança?
* @var boolean
    */
   var $cookie = true;
 
/**
* Armazena as mensagens de erro
* @var string
    */
var $erro = '';
 
/**
*
*/
public function Conexao()
{ 
try
{
$db = new PDO( "mysql:host=" . $this->hostname . "; dbname=" . $this->database . "", $this->username, $this->password );
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$db->exec( 'SET NAMES utf8' );
}
catch( PDOException $e )
{
mail( $sistema_email, "PDOException em: ", $e->getMessage() );
die( "Connection Error: " . $e->getMessage() );
}
return $db;
}
 
/**
* Usa algum tipo de encriptação para codificar uma senha
*
* Método protegido: Só pode ser acessado de dentro da class 
* 
* @param string $senha - A senha que será codificada
* @return string - A senha já codificada
*/ 
function __codificaSenha( $senha )
{
// return sha1( $senha );
return sha1( $senha );
}
 
/**
* Valida se o usuário existe
*
* @param string $usuario - O usuário que será validado
* @param string $senha - A senha que será validada
* @return boolean - Se o usuário existe ou não
*/
function validaUsuario( $usuario, $senha )
{
$senha = $this->__codificaSenha( $senha );
 
// Procura por usuários com o mesmo usuário e senha
$sql = $pdo->prepare( "
SELECT 
COUNT(*)
FROM
'" . $this->database . "'.'" . $this->table ."'
WHERE
'" . $this->campos['usuario'] . "' = :usuario
AND
'" . $this->campos['senha'] ."' = :senha
" );
$bnd = $sql->bindValue( ":usuario", $usuario , PDO::PARAM_STR );
$bnd = $sql->bindValue( ":senha", $senha, PDO::PARAM_STR );
$exe = $sql->execute();
$row = $sql->rowCount();
 
if( $row == 1 )
{
$total = $sql->fetch( PDO::FETCH_OBJ );
}
return ( $total == 1 ) ? true : false;
}
 
/**
* Loga um usuário no sistema salvando seus dados na sessão
    *
    * @param string $usuario - O usuário que será logado
    * @param string $senha - A senha do usuário
    * @return boolean - Se o usuário foi logado ou não
*/
function logaUsuario( $usuario, $senha ) 
{
// Verifica se é um usuário válido
if( $this->validaUsuario( $usuario, $senha ) ) 
{
// Inicia a sessão?
if( $this->iniciaSessao AND !isset( $_SESSION ) ) 
{
session_start();
}
 
// Traz dados da tabela?
if( $this->dados != false ) 
{
// Adiciona o campo do usuário na lista de dados
if( !in_array( $this->campos[ 'usuario' ], $this->dados ) ) 
{
$this->dados[] = 'usuario';
}
 
// Monta o formato SQL da lista de campos
$dados = '`' . join( '`, `', array_unique( $this->dados ) ) . '`';
 
// Consulta os dados
$sql = $pdo->prepare( "SELECT {$dados}
FROM `{$this->database}`.`{$this->table}`
WHERE `{$this->campos['usuario']}` = '{$usuario}'" );
$query = $sql->execute();
 
// Se a consulta falhou
if( !$query ) 
{
 // A consulta foi mal sucedida, retorna false
 $this->erro = 'A consulta dos dados é inválida';
 return false;
} 
else 
{
// Traz os dados encontrados para um array
$dados = $sql->fetch( PDO::FETCH_OBJ );
 
// Limpa a consulta da memória
mysql_free_result($query);
 
// Passa os dados para a sessão
foreach( $dados as $chave => $valor ) 
{
$_SESSION[ $this->prefixoChaves . $chave ] = $valor;
}
}
 
// Usuário logado com sucesso
$_SESSION[$this->prefixoChaves . 'logado'] = true;
 
// Define um cookie para maior segurança?
if( $this->cookie ) 
{
// Monta uma cookie com informações gerais sobre o usuário: usuario, ip e navegador
$valor = join('#', array($usuario, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
 
// Encripta o valor do cookie
$valor = sha1($valor);
 
setcookie($this->prefixoChaves . 'token', $valor, 0, '/');
}
 
// Fim da verificação, retorna true
return true;
}
} 
else 
{
$this->erro = 'Usuário inválido';
return false;
}
 
 
}
 
/**
* Verifica se há um usuário logado no sistema
*
    * @return boolean - Se há um usuário logado ou não
    */
function usuarioLogado() 
{
// Inicia a sessão?
if( $this->iniciaSessao AND !isset( $_SESSION ) ) 
{
session_start();
}
 
// Verifica se não existe o valor na sessão
if( !isset( $_SESSION[ $this->prefixoChaves . 'logado' ] ) OR !$_SESSION[ $this->prefixoChaves . 'logado' ] )
{
return false;
}
 
// Faz a verificação do cookie?
if( $this->cookie ) 
{
// Verifica se o cookie não existe
if( !isset( $_COOKIE[ $this->prefixoChaves . 'token' ] ) ) 
{
return false;
} 
else 
{
// Monta o valor do cookie
$valor = join( '#', array( $_SESSION[ $this->prefixoChaves . 'usuario' ], $_SERVER[ 'REMOTE_ADDR' ], $_SERVER[ 'HTTP_USER_AGENT' ] ) );
 
// Encripta o valor do cookie
$valor = sha1( $valor );
 
// Verifica o valor do cookie
if( $_COOKIE[ $this->prefixoChaves . 'token' ] !== $valor ) 
{
return false;
}
}
}
// A sessão e o cookie foram verificados, há um usuário logado
return true;
}
 
/**
* Faz logout do usuário logado
*
    * @return boolean
    */
function logout() 
{
// Inicia a sessão?
if( $this->iniciaSessao AND !isset( $_SESSION ) ) 
{
session_start(); 
}
 
// Tamanho do prefixo
$tamanho = strlen( $this->prefixoChaves );
 
// Destroi todos os valores da sessão relativos ao sistema de login
foreach( $_SESSION AS $chave => $valor ) 
{
// Remove apenas valores cujas chaves comecem com o prefixo correto
if( substr( $chave, 0, $tamanho ) == $this->prefixoChaves ) 
{
unset( $_SESSION[ $chave ] );
}
}
 
// Destrói asessão se ela estiver vazia
if( count( $_SESSION ) == 0 ) 
{
session_destroy();
 
// Remove o cookie da sessão se ele existir
if( isset( $_COOKIE[ 'PHPSESSID' ] ) ) 
{
setcookie( 'PHPSESSID', false, ( time() - 3600 ) );
unset( $_COOKIE[ 'PHPSESSID' ] );
}
}
 
// Remove o cookie com as informações do visitante
if( $this->cookie AND isset( $_COOKIE[ $this->prefixoChaves . 'token' ] ) ) 
{
setcookie( $this->prefixoChaves . 'token', false, ( time() - 3600 ), '/' );
unset( $_COOKIE[ $this->prefixoChaves . 'token' ] );
}
 
// Retorna SE não há um usuário logado
return !$this->usuarioLogado();
}
}
:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

No Git https://github.com/estudioprogramacaocriativa/forum_imaster/issues/1

 

Me digam se estou usando da maneira correta:

 

 

<section class="content">
<br><br>
<h1>Menu tab 1</h1>
<article>
<form action="" method="post">
<input type="hidden" name="action" value="send_login">
<label>
<strong>Usuário</strong>
<input type="email" name="email" id="email">
</label>
<label>
<strong>Senha</strong>
<input type="password" name="senha" id="senha">
</label>
<button type="submit">Entrar</button>
</form>
 
<?php
$sessao = new Usuario();
$pdo    = $sessao->Conexao();
 
if( isset( $_POST[ 'action' ] ) )
{
if( empty( $_POST[ 'email' ] ) )
{
echo 'Preencha o campo e-mail';
}
elseif( empty( $_POST[ 'senha' ] ) )
{
echo 'Preencha o campo senha';
}
else
{
$sessao->logaUsuario( $_POST[ 'email' ], $_POST[ 'senha' ] );
}
}
 
$sessao->usuarioLogado(); 
?>
 
</article>
</section>

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.