Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Cadastro e Login - #26 Sessions II

25/11/2018

Continuando 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!

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

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.
Saiba mais!
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.
Saiba mais!
Cadastro e Login
Neste curso vamos aprender a criar um sistema completo de cadastro e login.
Saiba mais!