Formulário de login com níveis de permissão e bloqueio de pessoas
E aí galera beleza?
Eu iria postar uma dúvida aqui no site, mas acabei resolvendo alguns problemas de acesso através de um formulário de login com suas respectivas permissões. Então postarei um pequeno tutorial de acesso com login e senha, definindo se a pessoa é administrador ou usuário, se ela está bloqueado ou não. Vamos para a prática.
1° Passo, crie um banco chamada teste no phpmyadmin ou em qualquer outro banco.
2° Passo, crie uma tabela, neste exemplo criei uma tabela chamado 'usuarios'. Eis o exemplo abaixo:
001 drop table if exists usuarios;
002 create table usuarios
003 (
004 user_codigo int not null auto_increment,
005 user_nome varchar(50) not null,
006 user_usuario varchar(25) not null,
007 user_senha varchar(40) not null,
008 user_email varchar(100) not null,
009 user_nivel int(1) unsigned not null default '1',
010 user_ativo bool not null default '1',
011 primary key (user_codigo),
012 unique key 'user_usuario' ('user_usuario'),
013 key 'user_nivel' ('user_nivel')
014 )ENGINE=InnoDB;
A linha 01, se existir a tabela de usuarios, deleta-o.
A linha 02, crie uma tabela de usuarios.
A linha 03, abre o parênteses.
A linha 04, criei um atributo chamado user_codigo que é do tipo inteiro não nulo e vai se auto incrementando, ou seja, ele irá incrementar de 1 em 1 para cada novo registro.
A linha 05, criei um atributo chamado user_nome que é do tipo varchar de 50 caracteres não nulo.
A linha 06, criei um atributo chamado user_usuario que é do tipo varchar de 25 caracteres não nulo.
A linha 07, criei um atributo chamado user_senha que é do tipo varchar de 40 caracteres não nulo.
A linha 08, criei um atributo chamado user_email que é do tipo varchar de 100 caracteres não nulo.
A linha 09, criei um atributo chamado user_nivel que é do tipo int tamanho 1 unsigned não nulo sendo que o default dele é 1. O unsigned só aceita valores positivos.
A linha 10, criei um atributo chamado user_ativo que é do tipo booleano não nulo sendo que o default dele é 1.
A linha 11, defini a chave primária o user_codigo.
A linha 12, defini que o meu atributo user_usuario será a chave única, ou seja, o atributo user_usuario não terá nomes repetidos.
A linha 13, defini a chave para o atributo user_nivel, ou seja, o índice a ser usado.
A linha 14, feche o parênteses.
Observação: A Palavra KEY é normalmente um sinônimo para INDEX. A chave de atributo chave primária também pode ser especificado apenas como KEY quando administrado em uma definição de coluna. Isto foi implementado para compatibilidade com outros bancos de dados.
Observação: O atributo user_nível, é nele que iremos definir se a pessoa que logou no site é o administrador ou usuário, mas você deve estar perguntando: "como faremos isso?" Isto é simples se o valor do atributo user_nível for igual a 1 então ele será o administrador, agora se o atributo user_nível for igual a 2 então ele será o usuário.
O atributo user_ativo foi criado para bloquear ou desbloquear um certo usuário, mas você deve estar perguntando novamente: "como faremos isso?" E novamente responderei que é simples, fácil e ágil, então vamos lá. Observe que o atributo user_ativo é do tipo booleano, neste nosso exemplo trabalharemos os valores 0 e 1, sendo 0 igual a falso e 1 igual a verdadeiro, para ficar ainda mais esclarecedor segue abaixo um exemplo de código em php, para observar o resultado:
<?php
$a = (bool)0;
$b = (bool)1;
var_dump($a)."<br />";
var_dump($B);
?>
Feito isto você observará que 0 está para falso e 1 está para verdadeiro, então voltando na tabela de usuarios no nosso atributo user_ativo você pode observar que o default dele é 1. Isto significa que o usuário terá acesso permitido a sua respectiva página após ter feito o login.
Agora iremos inserir alguns dados na tabela de usuários:
INSERT INTO 'usuarios' VALUES (NULL, 'Joao', 'Joao', SHA1('123'), 'joao@teste.com', 1, 1);
INSERT INTO 'usuarios' VALUES (NULL, 'Maria', 'Maria', SHA1('b56'), 'maria@teste.com', 2, 1);
INSERT INTO 'usuarios' VALUES (NULL, 'Jose', 'Jose', SHA1('f8a'), 'jose@teste.com', 2, 0);
INSERT INTO 'usuarios' VALUES (NULL, 'Juciclei', 'Juciclei', SHA1('4aa'), 'clei@teste.com', 1, 0);
INSERT INTO 'usuarios' VALUES (NULL, 'Firmino', 'Firmino', SHA1('709'), 'fir@teste.com', 2, 1);
Observa que o nosso atributo user_senha é um varchar de 40 caracteres isto porque estamos usando o método de criptografia SHA1(), na qual trabalha com caracteres alfanuméricos. O SHA1 é usada numa grande variedade de aplicações e protocolos de segurança, incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. Um outro ponto a ser observado nesta inserção de dados é os valores 1 e 2 que é para administrador e usuário, respectivamente; e os valores 0 e 1 que é bloqueado e desbloqueado, respectivamente. Agora vamos criar o nosso formulário de login de acesso. Crie um novo documento chamado login.php
001 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
002 <html xmlns="http://www.w3.org/1999/xhtml">
003 <head>
004 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
005 <title>Formulário de Login</title>
006 </head>
007 <body style="text-align:center">
008 <form action="validacao.php" method="post">
009 <fieldset>
010 <legend style="margin-left:900px">Dados de Login</legend><br />
011 <label for="usuario">Login.:</label>
012 <input type="text" id="usuario" name="usuario" size="25" maxlength="25" /><br /><br />
013 <label for="senha">Senha.:</label>
014 <input type="password" id="senha" name="senha" size="25" maxlength="25" /><br /><br />
015 <input type="submit" name="logar" value="Logar" />
016 </fieldset>
017 </form>
018 </body>
019 </html>
/*****************************************************************************************************************/
Acabamos de criar o nosso formulário de login.php, as observações a ser feitas neste formulário são:
1° - A Action da linha 8 que chamará o validacao.php e o método que será o tipo post;
2° - A tag name que tem como elemento o usuario na linha 12, é desta tag que iremos pegar os valores do campo digitado;
3° - A tag name que tem como elemento a senha na linha 14, é desta tag que iremos pegar os valores do campo digitado;
4º - Na linha 15 temos o botão chamdo logar e o type dele é submit e a tag name temo como elemento logar.
Chega de enrolação vamos criar o nosso documento validacao.php
001 <?php
002 if(isset($_POST['logar'])) {
003 $user = addslashes(trim(mysql_real_escape_string($_POST['usuario'])));
004 $pass = addslashes(trim(mysql_real_escape_string($_POST['senha'])));
005
006 if(empty($user) or empty($pass)) {
007 print "Os Campos devem ser preenchidos!";
008 }
009 else {
010 mysql_connect('localhost','root','') or trigger_error(mysql_error());
011 mysql_select_db('teste') or trigger_error(mysql_error());
012
013 $sql = "SELECT user_nome, user_nivel, user_ativo FROM usuarios WHERE (user_usuario = '". $user ."') AND (user_senha = '". sha1($pass) ."')";
014 $query = mysql_query($sql);
015
016 if(mysql_num_rows($query) != 1) {
017 $nome = isset($_POST['user_nome']);
018 $senha = isset($_POST['user_senha']);
019
020 if(($user != $nome) || ($pass != $senha)) {
021 print "Usuário ou senha incorretos!";
022 }
023
024 if(is_dir("logs/log_erro")) {
025 $data = date("d/m/Y", mktime(gmdate("d"), gmdate("m"), gmdate("Y")));
026 $hora = date("H:i:s", mktime(gmdate("H")-3, gmdate("i"), gmdate("s")));
027 if($abrir = fopen("logs/log_erro/".$user.".txt","a+")) {
028 fputs($abrir, "O usuário ".$user." tentou logar no site as ".$hora." do dia ".$data."\n");
029 }
030 }
031 else {
032 mkdir("logs");
033 mkdir("logs/log_erro");
034 $data = date("d/m/Y", mktime(gmdate("d"), gmdate("m"), gmdate("Y")));
035 $hora = date("H:i:s", mktime(gmdate("H")-3, gmdate("i"), gmdate("s")));
036 if($abrir = fopen("logs/log_erro/".$user.".txt","a+")) {
037 fputs($abrir, "O usuário ".$user." tentou logar no site as ".$hora." do dia ".$data."\n");
038 }
039 }
040 }
041 else {
042 $res = mysql_fetch_assoc($query);
043 if(!isset($_SESSION)) {
044 session_start();
045 }
046 $_SESSION['nome'] = $res['user_nome'];
047 $_SESSION['nivel'] = $res['user_nivel'];
048 $_SESSION['ativo'] = $res['user_ativo'];
049
050 if(($_SESSION['nivel']) && ($_SESSION['ativo'] != 1)) {
051 print "Você está temporariamente bloqueado!";
052 }
053 else {
054 if($_SESSION['nivel'] == 1) {
055 $_SESSION['log_admin'] = true;
056 header("Location:admin.php");
057 }
058 elseif($_SESSION['nivel'] == 2) {
059 $_SESSION['log_user'] = true;
060 header("Location:user.php");
061 }
062 }
063
064 if(is_dir("logs/log_acesso")) {
065 $data = date("d/m/Y", mktime(gmdate("d"), gmdate("m"), gmdate("Y")));
066 $hora = date("H:i:s", mktime(gmdate("H")-3, gmdate("i"), gmdate("s")));
067 if($abrir = fopen("logs/log_acesso/".$user.".txt","a+")) {
068 fputs($abrir, "O usuário ".$user." logou no site as ".$hora." do dia ".$data."\n");
069 }
070 }
071 else {
072 mkdir("logs");
073 mkdir("logs/log_acesso");
074 $data = date("d/m/Y", mktime(gmdate("d"), gmdate("m"), gmdate("Y")));
075 $hora = date("H:i:s", mktime(gmdate("H")-3, gmdate("i"), gmdate("s")));
076 if($abrir = fopen("logs/log_acesso/".$user.".txt","a+")) {
077 fputs($abrir, "O usuário ".$user." logou no site as ".$hora." do dia ".$data."\n");
078 }
079 }
080 }
081 }
082 }
083 ?>
Linha 2: temos um trecho de código que dize o seguinte:
if(isset($_POST['logar'])) {
, se existir a variável logar que é do tipo post faça tal coisa. Este nome 'logar' que é do tipo post ele está vindo do nosso formulário de login.php na linha 15, através da tag name que tem por elemento o 'logar'.
Linha 3: criamos uma variável chamado $user em que ele irá receber a nossa variável do usuario que é do tipo post. Como falei na linha 2, ele está vindo através da tag name como vocês podem ver na linha 12 do login.php. Na nossa variável $user ele recebe três métodos, o addslashes, o trim e o mysql_real_escape_string.
1° addslashes => O Método addslashes, é adicionar barras invertidas como escape para alguns caracteres especiais. Esta função é para impedir contra o SQL Injection.
2° trim => O Método trim destina-se remover espaço em branco à esquerda e à direita de uma variável de uma cadeia de caracteres de texto ou valor.
3° mysql_real_escape_string => O Método mysql_real_escape_string, ela escapa os caracteres especiais como aspas simples e duplas antes de enviar para o banco de dados.
Observação: Tanto o addslashes quanto o mysql_real_escape_string, fazem a mesma coisa, então você deve estar perguntando: "Porque esta redundância?" Isto porque o método mysql_real_escape_string não funciona em todas as versões do PHP.
Linha 4: criamos uma variável chamado $pass em que ele irá receber a nossa variável do senha que é do tipo post. Como falei na linha 2, ele está vindo através da tag name como vocês podem ver na linha 14 do login.php.
Linha 6: Neste trecho de código estamos dizendo o seguinte:
if(empty($user) or empty($pass)) {
, se a minha variável $user ou $pass forem vazias, o método empty() ele significa vazio ele é responsável por verificar se as minhas variáveis forem vazias.
Linha 7: Caso se as minhas variáveis forem vazias, então ele irá imprimir ao usuário um texto dizendo o seguinte:
print "Os Campos devem ser preenchidos!";
.
Linha 9: Se as minhas variáveis não forem vazias então faça tal coisa.
Linha 10: Abriremos uma conexão com o servidor MySQL, através do método mysql_connect(), passando três parâmetros do tipo string. A sequência a ser definida é: mysql_connect('nome_servidor', 'nome_usuario_mysql', 'senha_mysql'), no nosso caso o servidor é o localhost, o usuário mysql é o root e a senha é vazio. Se houver algum problema na nossa conexão, então o método trigger_error será acionado. O método trigger_error é usado para disparar uma mensagem de erro em uma condição especificada pelo usuário. Observa que dentro deste método passamos um parâmetro, que também é um método que o mysql_error. Este método retorna a descrição do erro da operação MySQL passado.
Linha 11: Se na linha 10 ocorreu tudo bem, então iremos chamar o nosso banco que é o 'teste' em que ele é o parâmetro do nosso método mysql_select_db. Este método define o banco de dados MySQL ativo.
O
or trigger_error(mysql_error())
, foi explicado na linha 10.
Linha 13: Criamos uma variável chamada $sql em ele irá receber:
"SELECT user_nome, user_nivel, user_ativo FROM usuarios WHERE (user_usuario = '". $user ."') AND (user_senha = '". sha1($pass) ."')";
esta instrução SQL está dizendo o seguinte selecione apenas os atributos user_nome, user_nivel, user_ativo da minha tabela de usuarios, desde que o meu atributo user_usuário seja igual a minha variável $user e o meu atributo user_senha seja igual a minha variável $pass, em que ele é o parâmetro do método SHA1.
Linha 14: Criamos uma variável chamada $query em que ele irá receber o método mysql_query, com o parâmetro $sql, que é a nossa variável da linha 13. O Método mysql_query, ele executa uma consulta em um banco de dados MySQL.
Linha 16: Aqui chamamos o método O mysql_num_rows(), com o parâmetro $query da linha 14 e perguntamos se é diferente de 1.
if(mysql_num_rows($query) != 1) {
O método mysql_num_rows(), ele retornará o número de linhas em um conjunto de registros. Então nesta linha estamos dizendo o seguinte se existir registros dentro da minha tabela de usuários e diferente de 1, "este diferente de 1 é porque chegamos no último registro da tabela de usuarios e o usuario encontrado não existe", então faça tal coisa.
Linha 17: Criamos uma variável chamada $nome em que ele irá receber
isset($_POST['user_nome']);
, o método isset ele irá verificar se existe o atributo user_nome que é do tipo POST, se o atributo existir, então a variável $nome ele irá receber os dados do registro da minha tabela de usuários.
Linha 18: Criamos uma variável chamada $senha em que ele irá receber
isset($_POST['user_senha']);
, ele segue o mesmo princípio da linha 17.
Linha 20:
if(($user != $nome) || ($pass != $senha)) {
, neste trecho de código estamos dizendo o seguinte: se a minha variável $user for diferente da minha variável $nome ou se a minha variável $pass for diferente da minha variável $senha, faça tal coisa. Uma pequena observação a ser feita as variáveis $user e $pass são os dados que estão vindo do meu formulário digitado pelo usuário; e as variáveis $nome e $senha são os dados que estão vindo do meu banco de dados MySQL 'teste', da minha tabela de usuarios.
Linha 21: Aqui será imprimido um texto na tela do usuário
print "Usuário ou senha incorretos!";
, ele só será imprimido se a condição da linha 20 não se satisfazer.
Linha 24: Entre as linhas 24 à 40, resolvi incrementar algo a mais, então vamos lá.
if(is_dir("logs/log_erro")) {
nesta linha estou perguntando o seguinte se is_dir este método verifica se o arquivo especificado é um diretório. Este método retornará verdadeiro caso o diretório exista. Cotinuando se o existir o diretório "logs/log_erro", faça tal coisa.
Linha 25: Criamos uma variável chamada $data em que ele irá receber o método date, este método é usado para trabalhar com datas e horas. Dentro deste método passamos dois parâmetros, o primeiro é do tipo string em que o formato é: "d/m/Y", que significa "dia/mês/Ano"; e o segundo parâmetro é o método mktime ele retorna o timestamp Unix para uma data. Este timestamp contém o número de segundos entre a Era Unix (January 1 1970 00:00:00 GMT) e o tempo especificado. Dentro deste método passamos três parâmetros que é especificado pelo dia, mês e ano, através do método gmdate. Este método formata uma data GMT/UTC/hora.
Linha 26: Criamos uma variável chamada $hora em que ele irá receber o método date. Dentro deste método passamos dois parâmetros, o primeiro é do tipo string em que o formato é: "H:i:s", que significa "Horas: minutos: segundos"; e o segundo parâmetro é o método mktime. Dentro deste método passamos três parâmetros que é especificado por horas, minutos e segundos, através do método gmdate. Observe que o primeiro parâmetro do método mktime, que é o método gmdate com o parâmetro Horas, tem o valor de -3, isto foi colocado pelo fato de que o marco zero começa na linha Greenwich, então para pegar a hora atual de brasília devemos subtrair -3, isto é devido ao fuso horário. Segue um exemplo abaixo:
<?php
$hora01 = date("H:i:s", mktime(gmdate("H"), gmdate("i"), gmdate("s")));
$hora02 = date("H:i:s", mktime(gmdate("H")-3, gmdate("i"), gmdate("s")));
print "Fuso Horário!<br /><br />";
print "Horário de Greenwich.: ".$hora01."!<br />";
print "Horário de Brasília.: ".$hora02."!";
?>
Linha 27:
if($abrir = fopen("logs/log_erro/".$user.".txt","a+")) {
este trecho de código está dizendo o seguinte: se, dentro desta nossa condição criamos uma variável chamada $abrir, em que ele irá receber o método fopen. Este método abre um arquivo ou URL. Se este método falhar ela retornará falso e mostrará um erro. Você pode ocultar a saída de erro adicionando o carácter "@" Arroba na frente do nome do método, no entanto, isto não é aconselhável, pelo fato de que você estará ocultando um erro. Imagine em uma aplicação de grande porte em que você ocultou este erro, e no final do seu projeto aparece um erro na qual você não está conseguindo enxergar, o erro que surgiu está no método fopen, porém você ocultou ele com o caráter @ Arroba. Uma dica nunca esconde os erros de aplicação debaixo do tapete, e sim tratá-os de uma forma eloquente que de tal maneira você nunca venha ter dor de cabeça. Continuando, dentro do método fopen temos dois parâmetros o primeiro especifica o nome do arquivo ou caminho do arquivo onde que a extensão é .txt,
"logs/log_erro/".$user.".txt"
. Observa que foi colocado a variável $user, ele irá informa o nome do usuário com a extensão é .txt. O Segundo parãmetro é o "a+" ele permite a leitura e a gravação do texto. Ele irá preservar o conteúdo do arquivo por escrito ao final do arquivo.
Linha 28: Aqui Chamamos o nosso método fputs. Este método escreve em um arquivo aberto, ele irá parar no fim do ficheiro ou quando atinge o comprimento especificado. Neste método passamos dois parâmetros o primeiro é a nossa variável $abrir que o nosso arquivo a ser aberto e o segundo parâmetro é uma string, em que será escrito a mensagem dentro do arquivo texto.
"O usuário ".$user." tentou logar no site as ".$hora." do dia ".$data."\n"[php], observe que dentro do arquivo texto temos três variáveis, o primeiro é o nome do usuario, o segundo é a hora que ele logou no site e o terceiro é data atual.
Linha 31: Aqui está querendo dizer o seguinte: senão existir o diretório, então faça tal coisa.
Linha 32: Chamamos o método mkdir, ele é responsável por criar um diretório e dentro dele passamos apenas um parâmetro chamado "logs".
Linha 33: Aqui criei mais um diretório dentro da pasta "logs". Então se você quiser criar um diretório dentro de outros diretórios, você tem que fazer o seguinte, segue o exemplo abaixo:
[php]
<?php
if(is_dir("Diretório_A/Diretório_B/Diretório_C/Diretório_D/Diretório_E")) {
if($abrir = fopen("Diretório_A/Diretório_B/Diretório_C/Diretório_D/Diretório_E/teste.txt","a+")) {
fputs($abrir, "Teste\n");
}
}
else {
mkdir("Diretório_A");
mkdir("Diretório_A/Diretório_B");
mkdir("Diretório_A/Diretório_B/Diretório_C");
mkdir("Diretório_A/Diretório_B/Diretório_C/Diretório_D");
mkdir("Diretório_A/Diretório_B/Diretório_C/Diretório_D/Diretório_E");
if($abrir = fopen("Diretório_A/Diretório_B/Diretório_C/Diretório_D/Diretório_E/teste.txt","a+")) {
fputs($abrir, "Teste\n");
}
}
?>
Linha 34 à 37: Segue o mesmo exemplo das linhas 25 à 28.
Linha 41: Senão, aqui está dizendo o seguinte se existir o usuario então faça tal coisa:
Linha 42: Criamos uma variável chamada $res em que ele irá receber o método mysql_fetch_assoc() com o parâmetro $query que é a nossa variável que criamos na linha 14. O método mysql_fetch_assoc() retorna uma linha de um conjunto de registros como uma matriz associativa. Você deve estar perguntando "como assim matriz associativa?" Calma aí colega não precisaremos entrar em pânico, pois o Brasil é nosso, uma matriz associativa é uma matriz onde cada chave id está associado a um valor. Como Assim? É que podemos usar os valores como chaves e atribuir valores a eles, aqui iremos especificar três exemplos de matriz associativa:
Exemplo 01: Utilização de uma matriz para atribuir as idades para as diferentes pessoas.
<?php
$idade = array("Joao"=>15, "Maria"=>21, "Juciclei"=>17);
?>
Exemplo 02: Aqui Estamos mostrando uma forma de criar um array.
<?php
$idade['Joao'] = "15";
$idade['Maria'] = "21";
$idade['Juciclei'] = "17";
?>
Exemplo 03: As chaves de identificação podem ser utilizados em um script.
<?php
$idade['Joao'] = "15";
$idade['Maria'] = "21";
$idade['Juciclei'] = "17";
print "Juciclei tem ".$idade['Juciclei']." anos.";
?>
O método mysql_fetch_assoc(), recebe uma linha do método mysql_query() e retorna uma matriz verdadeira ou falso em caso de falha ou quando não houver mais linhas. Observação: Depois que os dados são recuperados, este método se move para a próxima linha no conjunto de registros. Cada chamada subseqüente ao mysql_fetch_assoc() retorna a próxima linha no conjunto de registros.
Linha 43: O ponto de exclamação significa not, então nesta linha está querendo dizer o seguinte se não existir uma sessão faça tal coisa.
Linha 44: A finalidade do método session_start(), é de armazenar informações do usuário em sua sessão de PHP. Então antes de iniciar uma sessão, você deve inicializar com session_start().
Linha 46: Aqui criamos uma variável de sessão chamada nome onde ele irá receber a nossa variável $res com o atributo $user_nome, vindo da tabela de usuários.
Linha 47 e 48: Segue o mesmo princípio da linha 46.
Linha 50:
if(($_SESSION['nivel']) && ($_SESSION['ativo'] != 1)) {
, aqui estamos dizendo o seguinte se existir a minha variável de sessão chamada nível e a minha variável de sessão chamada ativo for diferente de 1, faça tal coisa. É esta parte do código que iremos definir se o usuário está bloqueado ou desbloqueado, como disse na tabela de usuarios no atributo user_ativo. A finalidade disto é para não excluir o usuário definitivamente, você deixará apenas o usuário inativo.
Linha 51: Aqui irá imprimir uma mensagem ao usuário
print "Você está temporariamente bloqueado!";
, ele será imprimido se a condição da linha 50 não satisfazer.
Linha 53: Senão, aqui está querendo dizer o seguinte se a minha condição satisfazer, faça tal coisa.
Linha 54:
if($_SESSION['nivel'] == 1) {
, se a minha variável de sessão chamada nivel for igual a 1, faça tal coisa.
Linha 55: Criei uma variável de sessão chamada log_admin onde ele irá receber true. Criamos essa variável de sessão, para depois fazermos a verificação na página do admin.php.
Linha 56: O Método header(), ele envia um cabeçalho HTTP-prima para um cliente. Dentro deste método passamos um parâmetro para ele que é o Location:admin.php, isto que dizer que ele será rediresionado para esta página.
Linha 58:
if($_SESSION['nivel'] == 2) {
, se a minha variável de sessão chamada nivel for igual a 2, faça tal coisa.
Linha 59: Criei uma variável de sessão chamada log_user onde ele irá receber true. Criamos essa variável de sessão, para depois fazermos a verificação na página do user.php.
Linha 60: O trecho deste código segue o mesmo princípio da linha 56, com uma pequena diferença, o parâmetro que passamos é o Location:user.php.
Linhas 64 à 77: Segue o mesmo princípio das linhas 24 à 37.
/****************************************************************************************************************/
Agora vamos criar a nossa página de admin.php
001 <?php
002 session_start();
003 if(!isset($_SESSION['log_admin']) or $_SESSION['nivel'] != 1) {
004 header("Location:login.php");
005 }
006 print "Bem Vindo ".$_SESSION['nome']."!";
007 ?>
008 <h1>A Página do Administrador</h1>
009 <a href="logout.php">Logout</a>
Linha 2: Estamos inicializando uma nova sessâo.
Linha 3:
if(!isset($_SESSION['log_admin']) or $_SESSION['nivel'] != 1) {
, aqui estamos dizendo o seguinte, se não existir a minha variável de sessão chamada log_admin ou se a minha varíavel de sessão chamada nivel for diferente de 1, faça tal coisa.
Linha 4: Chamamos o método header(), com o parâmetro "Location:login.php", isto que dizer o seguinte, se a condição da linha 3, não se satisfazer, então ele será rediresionado para o login.php.
Linha 6: Aqui imprimiremos uma mensagem ao usuário, caso se a minha condição se satisfazer, ou seja, se ele tiver uma sessao e o nível.
Linha 8: Aqui estamos usando a tag h1, para informar ao usuário a página em que ele se encontra.
Linha 9: A tag a, define um hiperlink que é usado para ligar a partir de uma página para outra página. E o atributo href, é ele que indicará o destino do link, que é para o logout.php. Dentro das tags a colocamos a palavara chamada Logout, em que após clicado neste link será rediresionado para a página login.php.
/***************************************************************************************************************/
Agora vamos criar a nossa página de user.php
001 <?php
002 session_start();
003 if(!isset($_SESSION['log_user']) or $_SESSION['nivel'] != 2) {
004 header("Location:login.php");
005 }
006 print "Bem Vindo ".$_SESSION['nome']."!";
007 ?>
008 <h1>A Página do Usuário</h1>
009 <a href="logout.php">Logout</a>
Linha 2: Estamos inicializando uma nova sessâo.
Linha 3:
if(!isset($_SESSION['log_admin']) or $_SESSION['nivel'] != 2) {
, aqui estamos dizendo o seguinte, se não existir a minha variável de sessão chamada log_user ou se a minha varíavel de sessão chamada nivel for diferente de 2, faça tal coisa.
Linha 4: Chamamos o método header(), com o parâmetro "Location:login.php", isto que dizer o seguinte, se a condição da linha 3, não se satisfazer, então ele será rediresionado para o login.php.
Linha 6: Aqui imprimiremos uma mensagem ao usuário, caso se a minha condição se satisfazer, ou seja, se ele tiver uma sessao e um nível.
Linha 8: Aqui estamos usando a tag h1, para informar ao usuário a página em que ele se encontra.
Linha 9: A tag a, define um hiperlink que é usado para ligar a partir de uma página para outra página. E o atributo href, é ele que indicará o destino do link, que é para o logout.php. Dentro das tags a colocamos a palavara chamada Logout, em que após clicado neste link será rediresionado para a página login.php.
/****************************************************************************************************************/
Vamos criar agora a nossa última página chamada logout.php
001 <?php
002 session_start();
003 session_destroy();
004 header("Location: login.php");
005 exit;
006 ?>
Linha 2: Inicializamos uma nova sessão.
Linha 3: O método session_destroy(), serve para destruir completamente uma a sessão, ou seja, você perderá todos os seus dados de sessão armazenados.
Linha 4: Após destruir a sessão, chamamos o método header para que a minha página seja diresionada para o login.php
Linha 5: O método exit imprime uma mensagem e sai do script atual.
Criei este pequeno tutorial, porque não encontrava uma solução de como fazer isto criando um formulário de login definindo o tipo de acesso se é administrador ou usuário, e se esta pessoa está bloqueado ou desbloqueado e também a hora e a data em que a pessoa acessou o site, passei dias tentando fazer isto pesquisando em diversos sites. Creio que existe várias formas de se fazer esta aplicação e até melhores do que a minha aplicação.
Fica este pequeno tutorial bem esmiuçado para o fórum do imasters, caros colegas uma sugestão para vocês, tenta não copiar o código, mas caso você queira copiar o código, esmiuça o código vai fazendo alterações nele para ver como se comporta, resumindo estraçalha este código para os seus respectivos testes.
Falou Galera! Até Mais!
Discussão (3)
Carregando comentários...