Dúvidas sobre cookies de sessão em php e id's de usuário em mysql

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.

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.