<?php
class Usuario {
var $bancoDeDados = 'meu_site';
var $tabelaUsuarios = 'usuarios';
var $campos = array(
'usuario' => 'usuario',
'senha' => 'senha'
);
var $dados = array('id', 'nome');
var $iniciaSessao = true;
var $prefixoChaves = 'usuario_';
var $cookie = true;
var $erro = '';
function __codificaSenha($senha) {
return $senha;
}
function validaUsuario($usuario, $senha) {
$senha = $this->__codificaSenha($senha);
$sql = "SELECT COUNT(*) AS total
FROM `{$this->bancoDeDados}`.`{$this->tabelaUsuarios}`
WHERE
`{$this->campos['usuario']}` = '{$usuario}'
AND
`{$this->campos['senha']}` = '{$senha}'";
$query = mysql_query($sql);
if ($query) {
$total = mysql_result($query, 0, 'total');
mysql_free_result($query);
} else {
return false;
}
return ($total == 1) ? true : false;
}
function logaUsuario($usuario, $senha) {
if ($this->validaUsuario($usuario, $senha)) {
if ($this->iniciaSessao AND !isset($_SESSION)) {
session_start();
}
if ($this->dados != false) {
if (!in_array($this->campos['usuario'], $this->dados)) {
$this->dados[] = 'usuario';
}
$dados = '`' . join('`, `', array_unique($this->dados)) . '`';
$sql = "SELECT {$dados}
FROM `{$this->bancoDeDados}`.`{$this->tabelaUsuarios}`
WHERE `{$this->campos['usuario']}` = '{$usuario}'";
$query = mysql_query($sql);
if (!$query) {
$this->erro = 'A consulta dos dados é inválida';
return false;
} else {
$dados = mysql_fetch_assoc($query);
mysql_free_result($query);
foreach ($dados AS $chave=>$valor) {
$_SESSION[$this->prefixoChaves . $chave] = $valor;
}
}
}
$_SESSION[$this->prefixoChaves . 'logado'] = true;
if ($this->cookie) {
$valor = join('#', array($usuario, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
$valor = sha1($valor);
setcookie($this->prefixoChaves . 'token', $valor, 0, '/');
}
return true;
} else {
$this->erro = 'Usuário inválido';
return false;
}
}
function usuarioLogado() {
if ($this->iniciaSessao AND !isset($_SESSION)) {
session_start();
}
if (!isset($_SESSION[$this->prefixoChaves . 'logado']) OR !$_SESSION[$this->prefixoChaves . 'logado']) {
return false;
}
if ($this->cookie) {
if (!isset($_COOKIE[$this->prefixoChaves . 'token'])) {
return false;
} else {
$valor = join('#', array($_SESSION[$this->prefixoChaves . 'usuario'], $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']));
$valor = sha1($valor);
if ($_COOKIE[$this->prefixoChaves . 'token'] !== $valor) {
return false;
}
}
}
return true;
}
function logout() {
if ($this->iniciaSessao AND !isset($_SESSION)) {
session_start();
}
$tamanho = strlen($this->prefixoChaves);
foreach ($_SESSION AS $chave=>$valor) {
if (substr($chave, 0, $tamanho) == $this->prefixoChaves) {
unset($_SESSION[$chave]);
}
}
if (count($_SESSION) == 0) {
session_destroy();
if (isset($_COOKIE['PHPSESSID'])) {
setcookie('PHPSESSID', false, (time() - 3600));
unset($_COOKIE['PHPSESSID']);
}
}
if ($this->cookie AND isset($_COOKIE[$this->prefixoChaves . 'token'])) {
setcookie($this->prefixoChaves . 'token', false, (time() - 3600), '/');
unset($_COOKIE[$this->prefixoChaves . 'token']);
}
return !$this->usuarioLogado();
}
}
?>