Quando eu altero o id do usuário na tabela o usuário que estiver logado recebe outro id como resolvo isso? Ouvi falar que poderia destruir as sessões ou atualizadas mas não encontrei formas de fazer isso.
Dúvidas sobre cookies de sessão em php e id's de usuário em mysql
7 Respostas
Não está muito claro o que você quer. Qual o resultado final que espera obter? Que tutoriais ou cursos está seguindo?
Você está permitindo o usuário alterar o próprio id? Em muitos sistemas, raramente ocorre de você precisar alterar o id de um usuário, até porque isso pode causar problemas se houverem chaves estrangeiras e outras dependências, especialmente se esse id for chave primária da tabela em questão.
Não enviando pro usuário logado o id atualizado, e mantendo a sessão atual ativa, ou mesmo destruindo a sessão e forçando-o a fazer login novamente.
Você pode destruir uma sessão com session_destroy(), ou limpando o array session. Referências:
Abraço.
Então no caso é só evitar a alteração do id?
Depende do que você quer obter, e do que o sistema deve fazer. Você é quem está criando o sistema, você é quem precisa determinar o que pode ou não ser alterado pelo usuário.
- se o usuário pode alterar o id, precisa construir o sistema para permitir isso;
- se o usuário não pode alterar o id, precisa construir o sistema para não permitir isso;
Se o usuário não pode alterar o id, basta não permitir editar esse campo no form onde ele pode alterar outros dados do usuário. Isso pode ser obtido, por exemplo, tornando o campo readonly ou usando um input type=“hidden” no html, e também não alterando o campo de id no update que altera os demais campos. O valor desse campo só precisaria ser preenchido ao criar um novo usuário (no insert), seja passando um valor, seja via auto_increment.
Abraço.
Eu queria que o adm do site pudesse alterarar o id caso nescessário, mas quando eu altero se eu estiver logado eu acabo recebendo as informações de outro usuário que recebeu o meu antigo id.
Isso parece ser um problema com a forma como você consulta os dados, usando o id do usuário conectado (adm, nesse caso). Você está alterando a sessão do adm após fazer o update no banco?
Note que existe uma diferença entre:
- o adm poder alterar ids de outros usuários, mas não o próprio id;
- o adm poder alterar ids de quaisquer usuários, inclusive o próprio id;
De toda forma, voltando questão inicial de sessões, quando o adm alterar o próprio id, aí sim você precisa mexer na sessão dele. Um jeito simples seria desconectá-lo, redirecionando para a página de login, e fazendo-o conectar novamente, que vai recriar a sessão com o id apropriado (eu imagino).
Se ele altera o id de outro usuário, você não precisa mexer na sessão do adm. Pode mantê-lo conectado. Note que isso pode causar problemas se as consultas dependem só do id que está na sessão, se o adm mudar o id de um usuário para o de outro usuário.
Se quer que a sessão desse outro usuário seja desconectada quando o id dele for alterado, aí é outro processo totalmente diferente (e mais complexo).
Abraço.
Mas se for permitido alterar o id de algum usuário, ele terá um problema bem maior do que alterar dados na seção.
Como ficariam, por exemplo, as chaves estrangeiras que referenciam o id do usuário?
Do ponto de vista do SGBD, basta alterar na restrição referencial que ao mudar a chave primária, as chaves estrangeiras que a referenciam devem ser atualizadas também (ON UPDATE CASCADE), mas isso gera tanto efeito colateral caso a aplicação esteja em execução com vários clientes conectados e com sessões (com ss, não ç) que não vão ser atualizadas automaticamente quando da alteração no banco que, normalmente, e provavelmente no caso do PO, seja melhor evitar tal coisa. Se o PO quiser que o usuário tenha um ID que ele quer que seja usado para identificar algo, como “o código do cliente”, o ideal seria ter outra coluna, marcada como UNIQUE, para esse propósito. Infelizmente, ao ensinar banco de dados, a esmagadora maioria dos professores não explicam que o tal “id” é apenas uma chave primária artificial, usada com o objetivo de performance. Moral da história, não mexa com o id, deixa o SGBD gerenciar ele para você. Se quiser que o usuário ou o cliente ou seja lá o que for tenha um código que ele pode usar para se identificar, tipo um CPF ou RG, crie uma nova coluna para esse objetivo e marque-a como única.