Cadastro e Login - #26 Sessions II
25/11/2018Continuando nossa classe session, vamos desenvolver os métodos finais de configuração de uma sessão segura no PHP.
Trabalhando com Sessions no PHP 2
O método canary serve pra evitarmos o roubo de PHP SESSID:
#Proteger contra roubo de sessão
public function setSessionCanary($par=null)
{
session_regenerate_id(true);
if($par == null){
$_SESSION['canary']=[
"birth" => time(),
"IP" => TraitGetIp::getUserIp()
];
}else{
$_SESSION['canary']['birth']=time();
}
}
O método verifyIdSession por sua vez realiza diversas condições para garantir a integridade da session do usuário:
#Verificar a integridade da sessão
public function verifyIdSessions()
{
if(!isset($_SESSION['canary'])){
$this->setSessionCanary();
}
if($_SESSION['canary']['IP'] !== TraitGetIp::getUserIp()){
$this->destructSessions();
$this->setSessionCanary();
}
if($_SESSION['canary']['birth'] < time() - $this->timeCanary){
$this->setSessionCanary("time");
}
}
Repare acima que utilizamos o método destructSessions(). Vamos criá-lo abaixo:
#Destruir as sessions existentes
public function destructSessions()
{
foreach (array_keys($_SESSION) as $key) {
unset($_SESSION[$key]);
}
}
Por fim vamos fazer o método que verifica as páginas restritas do nosso site para que o usuário não tente acessar diretamente uma url sem efetuar o login:
#Validar as páginas internas do sistema
public function verifyInsideSession()
{
$this->verifyIdSessions();
if(!isset($_SESSION['login']) || !isset($_SESSION['permition']) || !isset($_SESSION['canary'])){
$this->destructSessions();
echo "
<script>
alert('Você não está logado');
window.location.href='".DIRPAGE."login';
</script>
";
}else{
if($_SESSION['time'] >= time() - $this->timeSession){
$_SESSION['time']=time();
}else{
$this->destructSessions();
echo "
<script>
alert('Sua sessão expirou. Faça login novamente!');
window.location.href='".DIRPAGE."login';
</script>
";
}
}
}
Dentro da ClassLayout vamos criar o método setHeadRestrito:
public static function setHeadRestrito()
{
$session=new ClassSessions();
$session->verifyInsideSession();
}
E nas páginas restritas basta chamarmos o método acima:
<?php \Classes\ClassLayout::setHeadRestrito(); ?>
<?php \Classes\ClassLayout::setHead('Área Restrita','Exclusivo para membros!'); ?>
<h1>Área Restrita</h1>
<?php \Classes\ClassLayout::setFooter(); ?>
Com isso finalizamos a parte de sessions. Sucesso nos códigos e na vida!
Posts Relacionados
Cadastro e Login - #25 Sessions I
Nessa vídeo aula vamos iniciar os trabalhos com $_SESSION no PHP. Vamos setar algumas configurações para tornar nossas sessões mais seguras.
Cadastro e Login - #27 Ajax Login e Caps Lock
Nessa vídeo-aula vamos trabalhar com ajax no sistema do login e alerta de caps lock quando o usuário digitar a senha.