Se você estiver armazenando a sessão no banco de dados, adicione um mecanismo pelo qual o userId seja armazenado como parte do registro de sessão do seu banco de dados, criando o que gosto de chamar de "sessão semântica". Quando o usuário efetuar login, verifique se já existe outra sessão; em caso afirmativo, use
session_id()
para fixar a nova sessão ao ID da sessão antiga, que se juntará a eles (e deve alterar o ID da sua nova sessão para todas as solicitações subsequentes). Certifique-se de realizar esta ação apenas durante a etapa de login, ou você pode acabar com condições de corrida esquisitas de duas sessões tentando ser uma a outra e "trocando".