Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

usando o unset na sessão - Duvida

galera eu estava vendo as aulas e fiquei um uma duvida por exemplo

a gente retorna o valor contido na sessão e depois da unset nela. o que acontece com o validaUsuario?

porque dentro dele ele verifica se existe a sessão se existir ele retorna. se eu crio a sessão mostro a mensagem e depois tiro o valor daquela sessão quando eu for na tela de cadastro ou de produto ele não vai me direcionar para a tela de login? por aquela sessão ter sido removida?

function mostraSession($tipo)
{
    if(isset($_SESSION[$tipo])){
        if ($tipo!="login"){

    ?> <p class="alert-<?=$tipo ?>"> <?=$_SESSION[$tipo] ?>   </p>
    <?php
    unset($_SESSION[$tipo]);
?>
}

ai blz mostrou a mensagem

eu clico no adicionar produto e existia essa validão aqui

validaUsuario("success");

// e  o valida usuario é 


function validaUsuario($tipo){

     if (empty($_SESSION[$tipo])){

    // o guilherme removeu a restrição de paginas para poder fazer isso? ou eu que me perdi mesmo


         header("Location:index.php");
         die();
     }

 }


}
9 respostas

Oi Maurício,

Se vc deu unset nela, ela não existe mais. Olhando o validaUsuario, o resultado do empty será nulo, e aí ele vai redirecionar para outra página, certo?

Um abraço!

então Mauricio exatamente ela não existe mais. o Guilherme no começo do fundamentos 2 criou um validaUsuario que só permitia que o usuário acesse as paginas se ele estivesse com uma sessão aberta. se a sessão for destruída ele não deveria acessar não é? mas o Guilherme nos outros videos mesmo fazendo o unset na sessão conseguiu abrir as paginas. fiquei com duvida sobre isso

ele removeu o validaUsuario ou eu fiz errado?

Bom dia Mauricio,

Parece fazer sentido, poderia indicar onde esta o exercicio do unset para conferirmos se tem alguma diferença?

Abraço

opa, eae Guilherme

olha só no video que a gente da unset na sessão

https://www.alura.com.br/course/php-mysql-e-fundamentos-da-web-parte-2/section/6

só que no vídeo anterior a gente criou uma função que verificaUsuario e se existe sessão o usuário pode conectar

https://www.alura.com.br/course/php-mysql-e-fundamentos-da-web-parte-2/section/3

eu não sei se eu me perdi durante a explicação e o verificaUsuario faz outra coisa se eu estiver errado me desculpem

Oi Mauricio,

Uma coisa que você deve verficar é que ele não faz unset($_SESSION['usuario_logado']);. O problema de o usuário não estar logado é se fizéssemos unset para o usuário que está logado.

Seu código ali em cima está recebendo um tipo para a função validaUsuario, o que não está correto. Apenas a função mostraAlerta recebe um tipo e faz unset.

Verifique novamente seu código e reveja os vídeos que você verá que ele só usa unset no mostra alerta.

Espero que tenha ajudado a esclarecer.

Abraço.

mas o mostraAlerta não recebe uma sessão com o nome success ou danger? com valor "logado atualmente como 'emaildousuario'"; e depois dá unset.

tipo o unico jeito de não mostrar isso é se a sessão não se chamasse success ou danger . porque ai eu criaria um if se não fosse success ou danger mostraria usando o alert-success mas sem dar o unset depois. porque pelo que eu entendi o mostraAlerta recebe um nome da sessão onde o tipo="$_SESSION['$nome'] que é o próprio(success ou danger). mostra a mensagem e depois dá unset.

a única coisa que eu fiz foi não criar o mostra alerta mas o que ta fazendo não é a mesma coisa?

eu vou rever os vídeos porque acho que não entendi muito bem então.

mas obrigado por responderem galera. to gostando bastante das aulas vlw abraço.

eu não postei o codigo todo acho que ficou confuso mesmo

olha só eu criei o mostraSession em vez de mostraAlerta

que é o seguinte

session_start();
function mostraSession($tipo)
{
    if(isset($_SESSION[$tipo]))
    {
        if ($tipo!="login"){

    ?> <p class="alert-<?=$tipo ?>"> <?=$_SESSION[$tipo] ?>   </p>
    <?php
    unset($_SESSION[$tipo]);
    }else
    {
        ?>
        <p class="text-info"> <?=$_SESSION[$tipo]; ?>   </p>
    <?php
    }

}

se você perceber estamos criando sempre a sessão com nome de SUCCESS OU DANGER para facilitar

na pagina de login ele faz um buscaUsuario lá onde ele verifica se o usuario existe no banco com aquele email e senha se retornar true se for true ele cria uma sessão chamada success se não ele cria com o nome danger

mas no mostraAlert (mostraSession) não dá para dar unset depois de mostrar? eu havia entendido que estava funcionando assim

ai para corrigir eu mudei o nome da sessão para $SESSION_['login'] = logado com sucesso como ." ".$email ;

e ai criei uma validação para se for diferente de login dar unset mas eu vou ver o código de novo pessoal. vlw

ele vai

solução!

Mauricio, tenha cuidado pois você está misturando uma coisa criada para ser temporário, que é o escopo de flash com algo que é para ser mais permanente (enquanto o usuário usa seu sistema).

O usuáiro não pode perder a sessao e usar o mesmo tipo de função para login e para mensagens é um risco. Melhor deixar isolado.

No arquivo logica-usuario.php você já trata de toda essa parte de mexer com a sessão para o usuáiro. Após o usuário logar, você só precisa colocar uma mensagem na sessão para usar o escopo de flash, após mostrar a mensagem, essa mensagem não serve mais, porém o usuário logado serve, então não devemos dar unset nele.

Use a função logaUsuario($login) para guardar o usuário, depois para mostrar o usuário logado, chame a função usuarioLogado(). Essas funções não retiram o usuário da sessão, apenas usam os dados que já estão lá.

Abraço.

entendi Paulo. agora entendi Vlw por me ajudar cara. abraço