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.
Este post faz parte de uma série, confira tudo que já foi publicado sobre o mesmo assunto.
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.
Atualmente temos 72 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.
Veja se isso ajuda: http://dev.rbtech.info/entendendo-e-interpretando-erros-em-scripts-php/
ResponderOlá 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.
ResponderOlá , 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.
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)
ResponderOlá 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.
O erro era apenas na execução do printf, resolvi o que está acontecendo no momento é que o Logout não está indo pra nenhuma url como eu resolvo este problema?
ResponderJá resolvi o problema.
ResponderOlá 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.
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.
ResponderRESOLVIDO: Faltava fazer aquela pequena correção no php.ini para não aparecerem mais notices...
obrigado!
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
ResponderFala 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á.
Responderhttp://dev.rbtech.info/entendendo-e-interpretando-erros-em-scripts-php/
ResponderBlz Ricardo, até aí eu havia entendido. Minha dúvida é que, por volta dos 13 minutos dessa aula, deveria aparecer no painel as informações do usuário logado. Já refiz todo o sistema desde a aula 1 por 3 vezes, e nesse ponto ocorre o mesmo problema. Pelo que entendi, o objeto usLogado não está recebendo as informações ou não está enviando as informações para o painel e por isso não exibe as mesmas. Não estou conseguindo visualizar o erro.
ResponderBom, a alimentação do objeto deve estar falhando em algum lugar, você terá que verificar onde isso acontece, pois com certeza há algo errado no meio do caminho.
ResponderOlá 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.
ResponderIsso pode variar conforme sua configuração de rede local, sugiro testar em um servidor online para verificar se tudo irá funcionar corretamente.
ResponderTenho uma hospedagem pela hostgator vou fazer um teste e depois volto a comentar,
Obrigado Ricardo.
ResponderRicardo 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.
ResponderParabens 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.
ResponderOlá 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
ResponderVerifique a visibilidade das propriedades da sua classe, você está chamando um método privado fora da mesma.
Responderagora esta dando o seguinte erro
A session had already been started - ignoring session_start() ...
Alguma ajuda?
Desde ja agradeço !
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?
Em localhost pode haver divergências de acordo com o servidor utilizado e de acordo com políticas de firewall por exemplo.
ResponderAltere o arquivo httpd.conf, onde se encontra "listen 80" altere para listen 127.0.0.1:80 ;)
ResponderInvalid argument supplied for foreach()
esta dando este erro na classe de sessao;
neste trecho de codigo:
alguma ajuda por favor?
Desde já agradeço;
Sua sessão está vazia, por isso ocorre o erro. Verifique se há dados na sessão e se necessário inicialize a mesma antes de printar dados vindos dela.
ResponderOla! 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.
As sessões do PHP são originalmente criadas em escopo SUPERGLOBAL, e seus dados podem ser acessados de qualquer local.
ResponderMuito 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.
ResponderEssas aulas estão me ajudando muito.
Responderquando 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$sessao->setVar('iduser',$usLogado->id);)
$sessao->setVar('iduser',$usLogado->id))
tira esse ';' para ver se resolve, ta errada a sintase, se tiver assim.
ResponderVocê está tentando chamar um método em uma váriável que não é um objeto, instancie seu objeto antes de tentar acessar métodos ou propriedades do mesmo.
ResponderCriei 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
Responderola Ricardo
estou com problema no painel. php
quando faço o login ele entra normalmente mas quando do um click em sair ele não aponta para o erro=3.
http://localhost/admin/painel.php?logoff=true
voce pode me dar uma dica?
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!
ResponderRicardo,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.
ResponderFiz 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.
ResponderOla 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?
ResponderPra 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.
ResponderBoa 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.
ResponderRicardo, 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.
ResponderSó configure seu servidor local corretamente.
ResponderUm... 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
Responderhttp://rbtech.info/como-configurar-um-servidor-local-com-wampserver/
ResponderEu 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+
ola estava com mesmo problema resolvi com eta formula obrigado daniel por esta dica
ResponderMesmo 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.
ResponderCorreçã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;
}
ó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
ResponderSim Márcio o uso do E é mais correto sim. Esta mudança e outros melhoramentos serão mostrados em uma aula bônus ao final do curso.
ResponderMe 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!
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!
Respondereu 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...
Responderretornando 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.
ResponderRicardo 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...
ResponderVerifique a classe de sessões para ver se não está lá o erro.
Responderfalai 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.
ResponderAmigo 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 .
ResponderEstou 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,
ResponderOlá, 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 ....
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...
ResponderCadê 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?!
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"
ResponderProf. Este curso será composto de quantas aulas?
ResponderMuito 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
Olá Ricardo, primeiramente quero parabenizar e agradecer pelas sequencias de vídeo aulas, e gostaria de saber, quantos videos são no total?
ResponderExcelent 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
ResponderAtualmente não, mas estou em processo de implementação de algumas classes para templates.
Responder© 2008-2023 - RBTech.info | Todos os direitos reservados | Hospedado por Innova Host
É proibida a reprodução total ou parcial de qualquer conteúdo deste site.
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