Painel de administração com PHP + OOP - Aula 06

  • Publicado em: 22/06/2012
  • Revisado em: 13/10/2012
  • Categoria(s)PHP
  • Autor: Ricardo Bernardi
  • Newsletter: Inscreva-se

Sejam todos bem vindos à mais uma aula do curso de criação de um painel administrativo utilizando PHP e orientação a objetos. Na aula de hoje faremos a criação da classe de sessões para em seguida criar as funções responsáveis por fazerem o sitema de login funcionar com session conforme manda a regra.

Ao final desta aula teremos todo sistema de login com session funcionando perfeitamente com as devidas verificações necessárias para impedir o acesso não autorizado ao nosso painel.

Mais posts desta série

Este post faz parte de uma série, confira tudo que já foi publicado sobre o mesmo assunto.

Compartilhe esse post:

Sobre o autor

Ricardo Bernardi

Sou técnico em hardware e desenvolvedor web, e sobre estes dois assuntos comecei a compartilhar aulas e artigos, tornando-me blogueiro em 2008. Em 2010 esse hobby virou profissão, e desde então tenho buscado melhorar e profissionalizar cada vez mais os projetos que mantenho na web.

Comentários

Atualmente temos 72 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.

  • rodrigues1000 comentou em

    Ricardo Bom dia!! não estou conseguindo tirar esse erro abaixo! se vc puder me ajudar serei muito grato.

    Notice: A session had already been started - ignoring session_start() in C:\wamp64\www\aulas\php\ADM_painel\classes\sessao.class.php on line 16
    Call Stack
    # Time Memory Function Location
    1 0.0010 238480 {main}( ) ...\painel.php:0
    2 0.0010 244272 include( 'C:\wamp64\www\aulas\php\ADM_painel\header.php' ) ...\painel.php:1
    3 0.0080 320648 sessao->__construct( ) ...\header.php:4
    4 0.0080 320696 sessao->start( ) ...\sessao.class.php:11
    5 0.0080 320744 session_start ( ) ...\sessao.class.php:16

    Responder
  • Jéferson Calixto da Silva comentou em

    Olá Ricardo!

    Obrigado pela iniciativa irmão, felizmente existe pessoas como você, como eu sou novo no PHP seus cursos tem me ajudado muito. Muito obrigado mesmo! Nessa aula você gerou uma função para imprimir todos as variáveis da sessão com os seus respectivos valores, para assim visualizarmos tudo o que estava sendo armazenado na mesma. No entanto, no meu projeto eu fiz algumas adaptações incluindo novos valores na sessão, e ao utilizar a sua função printAll, todos eles aparecem perfeitamente. Porém, no contexto do meu cms preciso imprimi-los separadamente, e ao tentar utilizar o comando echo $_SESSION['variavel'] não obtive exito.

    Como disse inicialmente suas aulas já me ajudaram bastante, mas se poder me dar um norte nesse problema eu agradeço.

    Abraços.

    Responder
  • Ricardo comentou em

    Olá , primeiramente queria parabenizar pelo trabalho, ja acompanho suas aulas a algum tempo e tenho prazer em dizer que foi apartir disso que começei a programar. To fazendo o Paine de Administração (Aula 05) e sempre fica dando erro, ja revisei todo o código e ainda sim não conseguir identificar. Na verdade nem carrega os arquivos dinâmicamente ta carregando com as funções loadJS, loadCSS.
    Queria sua ajuda pra está resolvendo esse problema.

    Responder
    • Se os arquivos não estão sendo carregados é porque há inconsistência na chamada dos mesmos (nome errado ou caminho do arquivo incorreto) e você deve verificar isso para que tudo funcione (há uma informação extra logo abaixo da aula 5 sobre isso)

      Responder
  • Olá Ricardo Boa Tarde! Primeiramente Parabéns estou aproveitando muito as aulas.
    Então quando eu executo o logoff do sistema aparece o seguinte erro:
    Notice: Undefined variable: pathlocal in C:\wamp\www\PainelAdministrativoIPM\paineladm\classes\autoload.php on line 7
    O erro acontece quando eu utilizo a função printAll
    Att.

    Responder
  • redman comentou em

    Olá Ricardo
    estou no final da aula 6, porém ao implementar a função verificaLogin() tá dando erro com o arquivo autoload.php; já tentei tirar a barra antes do $classe como você sugeriu e nada; não sei mais o que fazer.

    Responder
    • Interprete o erro para descobrir a origem do mesmo. A questão da barra é uma sugestão, mas se o erro não for relacionado aos diretórios é preciso buscar a solução adequada.

      Responder
      • redman comentou em

        RESOLVIDO: Faltava fazer aquela pequena correção no php.ini para não aparecerem mais notices...
        obrigado!

        Responder
  • Aron comentou em

    Boa noite Ricardo! Estou acompanhando o curso e tem me ajudado muito. Estou com um problema... Assim que eu faço login chamo o printAll() e ele me mostra todos os campos das sessões mas quando eu faço logout ele cria mais um campo(sidebar=1) na sessao e apaga todos o outros e esse campo não se destrói de jeito nenhum. Alguém pode me ajudar?

    obrigado

    Responder
  • Anderson comentou em

    Fala Ricardo. Parabéns pelas aulas. Formidáveis. Até esse ponto, ocorreu tudo tranquilamente. Nessa aula, quando faço o login e o painel abre, no lugar das informações do usuário, surge a mensagem "Notice: Undefined variable: in D:\xampp\htdocs\projetos\temporadanaweb\paineladmin\classes\sessao.class.php on line 57 iduser = ", para todas as variáveis. Pelo que entendi, o painel não está recebendo o objeto preenchido com as informações do usuário. Tem alguma idéia do que fiz errado? Agradeço desde já.

    Responder
  • Anderson Antonio comentou em

    Olá Ricardo, até aqui tudo redondinho quanto ao curso, porém na busca do 'ip', aparece apenas o '1', não retornando o nro. completo.
    Creio que seja alguma codificação do servidor, estou usando o "wamp".

    Se puder me dar uma dica, fico grato, mas vou seguir o curso mesmo assim.

    até breve.

    Responder
      • Anderson Antonio comentou em

        Tenho uma hospedagem pela hostgator vou fazer um teste e depois volto a comentar,

        Obrigado Ricardo.

        Responder
  • Natanel comentou em

    Ricardo venho acompanhando as aulas e houve um erro parecido com o do garoto do comentario acima.
    O meu so aparece o

    logado = 1
    ip = 127.0.0.1

    o restante fica vazio.
    o que pode ser?

    estou com o wamp.

    Responder
  • Junior comentou em

    Parabens pelas videos aulas, Ricardo estou com um probleminha ao efetuar o login, acesso o painel porem aquelas variáveis que deveriam receber os valores esta recebendo apenas "valor". esta printando desta forma abaixo

    iduser = valor
    nomeuser = valor
    loginuser = valor
    logado = valor
    ip = valor

    Uso o xamps como servidor local.

    Responder
  • Tito comentou em

    Olá ricardo, estou com um erro aqui e queria saber se tem como você me ajudar;

    Fatal error: Call to private method sessao::setVar() from context 'usuarios' in C:\wamp\www\padmin\classes\usuarios.class.php on line 29

    Responder
  • Anderson comentou em

    agora esta dando o seguinte erro

    A session had already been started - ignoring session_start() ...

    Alguma ajuda?
    Desde ja agradeço !

    Responder
  • tom comentou em

    Boa tarde Ricardo.
    Estou refazendo os exercícios e quando chamo o printall() ele retorna ip=::1 é normal ou pode haver algum erro no meu código?

    Responder
  • Gleison Medeiros comentou em

    Ola! Ricardo. Parabéns por estas vídeo aulas, são excelentes. Com relação a sessão, logo no inicio da edição do 'painel.php' eu observei que criou um novo objeto e com ele capturou os dados da sessão. Bem sempre estudei orientação a objetos com java, no PHP estou tendo algumas duvidas. Sei que configurou a sessão la em 'usuarios.class.php' na function doLogin(), você cria a sessão dentro da function. após criada a sessão ela fica disponível no escopo GLOBAL? O fato de criar um objeto ($sessao), la em painel.php, com o mesmo nome do objeto criado na function doLogin() cria uma referência para o mesmo objeto?
    Grato dês de já e mesmo que não responda, visto a excelência de suas vídeo aulas.

    Responder
      • Gleison Medeiros comentou em

        Muito legal. Obrigado por sua valiosa contribuição. Ainda sou novo na área de desenvolvimento web. Mas sempre que puder contribuirei com este portal. Abraço.

        Responder
  • Vicka comentou em

    quando digito a senha, aparece:

    metodo conecta foi chamado
    Fatal error: Call to a member function setVar() on a non-object in C:\wamp\www\aulas\php\paineladm\classes\usuarios.class.php on line 36 ($sessao->setVar('iduser',$usLogado->id);)

    Obrigada

    Responder
    • marciocamello comentou em

      $sessao->setVar('iduser',$usLogado->id);)

      $sessao->setVar('iduser',$usLogado->id))

      tira esse ';' para ver se resolve, ta errada a sintase, se tiver assim.

      Responder
  • marciocamello comentou em

    Criei uma classe para criar o menu de forma mais facil, para coloborar ai com a galera

    To gostando das aulas, ja programava em php, mais devido a estar muito oculpado,nao tive tempo para parar e me aprofundar no OOP, valeu mesmo ricardo pela colaboração, muito boa as aulas, e no que eu puder colaborar irei postar aqui nos comments, etc.

    se tiverem algo a melhorar na classe, dicas ricardo e a galera do site aqui so falar, vlww, e to acompanhando tudo pelo site, e redes sociais, vlw galeraaaaaaa

    http://pastebin.com/L99hPjpC

    Responder
  • Michelle comentou em

    Oi Ricardo! estou acompanhando o curso, estou usando o wampserver que não dá erro algum, mas quando transferi para um site de hospedagem ele dá erro.

    Coloquei em um site de hospedagem gratuita que tem MYSQL para teste e deu esse erro.

    Me ajude please!

    Responder
  • André comentou em

    Ricardo,em primeiro lugar parabéns pelas aulas, estava com o mesmo problema de todos, resolvi com a dica do Luis Fernando Kalfels, mas mesmo assim, muito boas as tuas aulas,tenho divulgado, forte abraço.

    Responder
  • Flavio comentou em

    Fiz essa aula e me aparece erro

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/bonsunet/public_html/paineladmin/painel.php:3) in /home/bonsunet/public_html/paineladmin/classes/sessao.class.php on line 15

    Seria o Servidor de hospedagem que falta configurações? Pois o codigo esta perfeitamente igual o da Aula.

    Responder
  • jeovane lemes comentou em

    Ola Ricardo e parabens de novo pelas videos aulas e estou com o mesmo problema tbm dos alunos acima quando coloca o verificalogin no painel.php e não acessa a pagina e não sai do ?erro=3 o que fazer e os exemplos que os alunos deram não funcionam e se eu tirar a checagem do painel.php funciona corretamente ond eesta o erro?

    Responder
  • Luis Fernando Kalfels comentou em

    Pra quem está logando e aparecendo página toda em branco experimente trocar a função getNVars() do arquivo sessao.class.php de private para public ou então na função verificaLogin() do arquivo funcoes.php retira esta checagem $sessao->getNVars()<=0 deixando apenas checar o getVar('logado')!=TRUE

    Abraço e parabéns Ricardo.

    Responder
  • Kikinho Fernandes comentou em

    Boa noite Ricardo,
    também estou com o erro depois que foi feito o verificaLogin(); não acessa o painel. Só removendo ele!?

    Um abraço.

    Responder
  • Daniel comentou em

    Ricardo, parabéns pelas aulas. Sou programador Access, e agora estou entrando no mundo PHP. Mundo real!!

    Veja, terminei de codificar a aula 6 do Painel, e sempre que faço um novo login, aparece a mensagem dentro do painel, onde tem um novo $session = new sessao(); :

    Notice: A session had already been started - ignoring session_start() in C:\Program Files\EasyPHP-5.3.9\www\voedividas\classes\sessao.class.php on line 19

    Quando comento a new session do painel, a msg para de aparecer.

    Existe algum verificação para que quando já existir uma sessão, ele não dar o start(); ?

    Grato.

    Responder
      • Daniel comentou em

        Um... sou bem novo em programação WEB, como posso fazer isso? Apenas curiosidade, pois já consegui resolver o problema alterando a função para a seguinte codificação:

        public function start() {
        		if(!isset($_SESSION)):
        			session_start();
        			$this->id = session_id();
        			$this->SetNvars();
        		endif;

        Abraços

        Responder
          • FabioADR comentou em

            Eu usei o seguinte código:

            public function start() {
            		$status = session_status();
            
            		if (($status==PHP_SESSION_DISABLED) || ($status == PHP_SESSION_NONE)):
            			session_start();
            			$this->id = session_id();
            			$this->setNvars();
            		endif;
            	}

            Resolveu também, mas só funciona em PHP 5.4.0+

        • marcos holanda casagrande comentou em

          ola estava com mesmo problema resolvi com eta formula obrigado daniel por esta dica

          Responder
        • Joel comentou em

          Mesmo problema só que bem resolvi distruir a sessão antiga antes e criar uma nova,esta funcionando, então ficou assim:

          public function start(){
          		if(isset($_SESSION)):
          			session_destroy();
          			session_start();
          			$this->id = session_id();
          			$this->setNVars();
          		else:	
          			session_start();
          			$this->id = session_id();
          			$this->setNVars();
          		endif;
          	}

          Tambem sou novo em programação então meu código pode estar fazendo coisas desnessarias.

          Responder
          • Joel comentou em

            Correção depois de fazer mais alguns testes vi que meu codigo apresenta problemas. Então a solução apresentada pelo Daniel ainda é a melhor na minha opinião.

            public function start(){
            	if(!isset($_SESSION)):
            		session_start();
            		$this->id = session_id();
            		$this->setNVars();
            	endif;
            }
  • Marcio vila comentou em

    ótima aula estou aprendendo muito, gostaria de apontar um equivoco e sua correção, muitos devem estar procurando erro até hoje ,em funções,veja:

    código fonte excluído pois não foi postado conforme as regras

    em usuario deve utilizar o operador lógico && pois somente se tudo estiver como verdadeiro o sistema redirecionara para o painel.php
    assim como se apresenta no video com operador OU(||) o sistema vai redirecionar caso uma das alternativas seja verdadeira nesse caso recomendo operado && e || para o arquivo funcoes.php

    em usuario ficaria assim

    código fonte excluído pois não foi postado conforme as regras

    existem varias formas de testar a lógica, essa é uma delas

    Responder
  • Sidney Jr. Miranda comentou em

    Me dar um Help aeh Ricardo?

    Seguinte toda vez que coloco esse código no arquivo funcoes.php:

    function verificaLogin(){
    	$sessao = new sessao();
    	if($sessao->getNvars()<=0 || $sessao->getVar('logado')!=TRUE || $sessao->getVar('ip')!=$_SERVER['REMOTE_ADDR']):
    		redireciona('?erro=3');
    	endif;	
    }

    e esse no usuarios.php:

    function verificaLogin(){
    	$sessao = new sessao();
    	if($sessao->getNvars()<=0 || $sessao->getVar('logado')!=TRUE || $sessao->getVar('ip')!=$_SERVER['REMOTE_ADDR']):
    		redireciona('?erro=3');
    	endif;	
    }

    aparece esse erro:

    Esta página da web tem um loop de redirecionamento
    A página da web em http://localhost/paineladm/?erro=3 resultou em muitos redirecionamentos. Apagar seus cookies para este site ou permitir cookies de terceiros pode resolver o problema. Se não resolver, talvez o problema esteja na configuração do servidor, e não em seu computador.
    Veja algumas sugestões:
    Recarregue esta página da web mais tarde.
    Saiba mais sobre este problema.
    Erro 310 (net::ERR_TOO_MANY_REDIRECTS): Houve muitos redirecionamentos.

    Esta página da web tem um loop de redirecionamento
    A página da web em http://localhost/paineladm/painel.php resultou em muitos redirecionamentos. Apagar seus cookies para este site ou permitir cookies de terceiros pode resolver o problema. Se não resolver, talvez o problema esteja na configuração do servidor, e não em seu computador.
    Veja algumas sugestões:
    Recarregue esta página da web mais tarde.
    Saiba mais sobre este problema.
    Erro 310 (net::ERR_TOO_MANY_REDIRECTS): Houve muitos redirecionamentos.

    Não aparece nada na Página, só esse dois erros.
    Já revi essa aula umas 10 vezes o código também, mas não achei o erro que possa causa esse problema.

    No PHP não acusa nada!?
    Me ajuda!

    Responder
    • Sidney Jr. Miranda comentou em

      correção do comentário acima:

      e esse no usuarios.php:

      $sessao = new sessao();
      		if($sessao->getNvars()>0 || $sessao->getVar('logado')==TRUE || $sessao->getVar('ip')==$_SERVER['REMOTE_ADDR']) 
      		redireciona('painel.php');

      mesmo assim ainda dar erro!

      Responder
      • Junior Eberhardt comentou em

        eu tive o mesmo problema e resolvi assim:

        no arquivo usuarios.php, na verificação ficou assim:

        if ($sessao->getNvars() > 0 || $sessao->getVar('ip') == $_SERVER['REMOTE_ADDR']) :
           redirecionar('painel.php');
        endif;

        e no arquivo funcoes.php, na verificação ficou assim:

        if ($sessao->getNvars() < 1 || $sessao->getVar('ip') != $_SERVER['REMOTE_ADDR']) :
          redirecionar('?erro=3');
        endif;

        testa ai e responde se deu certo ou não...

        Responder
  • Sidney Jr. Miranda comentou em

    retornando a dúvida que anterior, na última função dessa

    function verificaLogin(){
    	$sessao = new sessao();
    	if($sessao->getNvars()getVar('logado')!=TRUE):
    		redireciona('?erro=3');
    	endif;	
    }

    se eu fizer aquela inclusão depois do true tanto em funções tanto em usuários a página não carrega.

    Responder
  • Clauberson Pacheco comentou em

    Ricardo blz...Primeiro parabéns pelas vídeo aulas, descobri seu site a pouco tempo e estou acompanhando a risca este curso, se puder me ajudar numa dúvida agradeço, nesta aula fiz tudo certinho passo a passo revisei os códigos varias vezes, mas estou tendo problemas na sessão, faço o login ele me retorna um erro no painel, dizendo que não pode iniciar a sessão, coloquei um session_start logo abaixo da chamada das funções na index ai some o erro, porém não pega os dados no printAll, se alguém tiver alguma solução agradeço...t+ um abraço a todos...

    Responder
  • Junior Eberhardt comentou em

    falai Ricardo tudo beleza?

    então, eu também tive problemas, assisti todas as aulas umas 4 vezes para ver se eu encontrava o problema, pois não conseguia entrar no painel, e quando consegui logar não cadastrava, e o último problema foi que ele tinha excesso de loop, o navegador dizia isso pelo menos.

    esse último problema eu resolvi assim, tirei uma parte do if do arquivo funcoes.php e usuarios.php, deixando assim:

    $sessao->getVar('logado') == TRUE // usuarios.php
    $sessao->getVar('logado') != TRUE // funcoes.php

    depois que tirei esse pedaço o painel funcionou certinho...

    fiz vários e vários testes, quebrei a cabeça, e no fim era só isso. você sabe me dizer porque?

    valeu.

    Responder
    • Jimmy Nisgoski comentou em

      Amigo verifica se na hora que vc copiou do funcoes.php e colou no usuários, possivelmente deve ter deixado o ")" de fechamento do if fora do lugar. ;-). Isso geralmente ocasiona a mensagem de looping .

      Responder
  • jean figueiredo comentou em

    Estou com um probleminha tmbm na Aula 06, pois, fiz tudo certinho e na hora da exibição do erro=3, quando o usuario tenta acessar pagina restrita, ele nao exibe a msg.

    Você tem alguma ideia!

    ????

    att,

    Responder
  • jean figueiredo comentou em

    Olá, ricardo.
    Gostaria de dar uma ideia pra você ....
    se for possivel criar um forum pra sanar as dúvidas da moçada, axo que fica melhor tmbm ....

    Responder
  • Ricardo comentou em

    Olá Ricardo, estou acompanhando seu curso e ao seguir os ensinamento desta aula houve um problema. quando chamo no painel.php a função verificaLogin(); a verificação é feita, porém mesmo digitando usuário e senha corretos eu sou redirecionado para a página de index.php como erro=3. tenho um servidor apache, php5, mysql, phpmyadmin instalados no meu pc que roda ubuntu linux 12.04, será que existe alguma configuração no meu servidor que está fazendo ele interpretar incorretamente a verificação:

    código fonte excluído pois não foi postado de acordo com as regras

    Desde já agradeço pela colaboração...

    Responder
  • Danilo comentou em

    Cadê a outra video aula?
    Esse post atingiu a meta, e até agora nada.
    Disse que o curso era gratuito, mas está priorizando apenas os que pagam?!

    Responder
  • Sidney Jr. Miranda comentou em

    Boa Noite Ricardo, após incluir a última função de IP, você verificou se o sistema está funcionando?

    Pois no meu está dando esse erro: "Esta página da web tem um loop de redirecionamento"

    Responder
  • Douglas comentou em

    Muito bom as vídeo aulas,acho interessante os sites mobiles também, que está vindo com tudo cada vez mais.
    Se você pudesse fazer umas vídeo aulas de como fazer um site simples, só para nós termos uma ideia.
    Muito obrigado Ricardo por passar seus conhecimentos.
    Abrass

    Responder
  • Marcio comentou em

    Olá Ricardo, primeiramente quero parabenizar e agradecer pelas sequencias de vídeo aulas, e gostaria de saber, quantos videos são no total?

    Responder
  • Renato N. comentou em

    Excelent sequência de vídeo aulas Ricardo!
    Parabéns!

    Estou estudando o Smarty Template Engine, e o achei bastante interessante e eficaz, principalmente pelos recursos de cacheamento.

    Você utiliza algum mecanismo de template em seus projetos?

    Abraços

    Responder

Deixe seu comentário