Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

RuiGomes

Melhor maneira de obter resultados do utilizador

Mensagens Recomendadas

RuiGomes

Ultimamente tenho colocado bastantes dúvidas aqui, mas penso serem pertinentes, por isso desde já obrigado e desculpem a chatisse  :cheesygrin:

No sistema de login que construí, com base num exemplo, a parte de validação do utilizador faz isto:

function validateUser($username)
{
    session_regenerate_id (); //this is a security measure
    $_SESSION['valid'] = 1;
    $_SESSION['username'] = $username;
}

Ou seja, fico com um $_SESSION['username'] com o username.

Imaginando que preciso de alguns dados do utilizador frequentemente. A melhor maneira de o fazer é estar sempre a fazer queries à DB, incluir já um $_SESSION['dadosnecessarios'] na função de validação do utilizador, ou outra opção?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Inclui o $_SESSION['dadosnecessarios'], talvez em forma de array

$_SESSION['dadosnecessarios']['username'] = $username;
$_SESSION['dadosnecessarios']['admin'] = false;
$_SESSION['dadosnecessarios']['cordosolhos'] = 'azul';
$_SESSION['dadosnecessarios']['bi'] = '123456789';


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
taviroquai

Viva,

Coloca na session apenas dados necessários; não coloques informação sensível.

Se usares programação orientada a objectos podes organizar as funções relativas ao utilizador numa classe Utilizador (Model)... depois para teres esses dados sempre acessíveis podes usar um singleton ou ir passando a instância do utilizador aos outros objectos (bastante conhecido por Dependecy Injection).

Algumas leituras...

http://php.net/manual/en/language.oop5.php

http://php.net/manual/pt_BR/language.oop5.patterns.php

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
RuiGomes

O $_SESSION['valid'] é inútil, se existe o $_SESSION['username'] é porque a sessão existe.

Boa observação. Andei a dissecar o script e já tenho bastantes melhorias (como o PDO, que andei a postar dúvidas ontem), mas não tinha reparado nesse pormenor.

Vou já alterar.

Inclui o $_SESSION['dadosnecessarios'], talvez em forma de array

$_SESSION['dadosnecessarios']['username'] = $username;
$_SESSION['dadosnecessarios']['admin'] = false;
$_SESSION['dadosnecessarios']['cordosolhos'] = 'azul';
$_SESSION['dadosnecessarios']['bi'] = '123456789';

Era isso que estava a pensar fazer. Em termos de segurança, é viável? O pior que pode acontecer é alguém ter acesso à informação dos utilizadores?

A dúvida surge porque vou, por exemplo, estar sempre a apresentar o balanço da conta em todas as páginas, e acho desnecessário estar sempre a ir buscar o balanço à DB. Por outro lado se houver mudanças no balanço, tenho que mudar esse dado na sessão..

Viva,

Coloca na session apenas dados necessários; não coloques informação sensível.

Se usares programação orientada a objectos podes organizar as funções relativas ao utilizador numa classe Utilizador (Model)... depois para teres esses dados sempre acessíveis podes usar um singleton ou ir passando a instância do utilizador aos outros objectos (bastante conhecido por Dependecy Injection).

Algumas leituras...

http://php.net/manual/en/language.oop5.php

http://php.net/manual/pt_BR/language.oop5.patterns.php

Dados necessários, por assim dizer, não há nenhum. Posso ir buscar tudo à DB sem necessidade de armazenar na sessão, era mais para ter em conta a performance.

Sim, já me recomendaram várias vezes evoluir para OOP (e tenho mesmo que  ofazer  :wallbash:), mas para já vou continuar assim..

Obrigado pelos links anyway ;)

Algo útil é encriptar os dado presentes na sessão. Eu costumo deixar apenas o ID do utilizador encriptado com uma chave que muda de projecto para projecto.

Há alguma maneira fácil para o fazer? Neste momento estou a usar um cookie (para geolocalização) com base64_encode(serialize()), mas foi um exemplo que vi na web e decidi usar.

Para a sessão devo usar algo do mesmo género?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

A seguranca das variaveis de sessao é boa. Esses valores nunca saem (de motto proprio) do servidor. Se o servidor esta comprometido ... nem a base de dados fica segura


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
RuiGomes

A seguranca das variaveis de sessao é boa. Esses valores nunca saem (de motto proprio) do servidor. Se o servidor esta comprometido ... nem a base de dados fica segura

E quanto à manipulação das sessions?

É possível definir um $_SESSION['dados']['niveldeacesso'] = 1 e ser possível manipular esse nível?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.