Bom, então acho que estamos diante de um problema de comunicação da sua dúvida e os nossos "achismos".
Vou tentar construir o cenário da sua dúvida.
Abro uma instância do IE no meu PC, conecto no sistema e acesso uma página onde é listado o conteúdo de um ArrayList gerado na sessão.
Vou para outro PC lá na outra sala do prédio (:D) e abro uma instância do IE, conecto no sistema e acesso a mesma página onde é listado o mesmo conteúdo do ArrayList, é isso?
Bom, até aqui nada de anormal, visto que a cada chamada da tela é feito isso, então TODOS os usuários verão o que está na sessão da sua instância do seu navegador, certo?
Analise o seu exemplo:
ArrayList naCaixa = null;
naCaixa = (ArrayList) request.getSession().getAttribute("caixa");
if (naCaixa == null)
naCaixa = new ArrayList();
viewForm.setFuncionariosNaCaixa(naCaixa);
request.getSession().setAttribute("indexViewForm", viewForm);
Se a cada chamada da página você fizer exatamene o que está descrito acima, com certeza os valores sempre serão os mesmos, independente de fazer isso num mesmo PC ou diferente pois você está passando para viewForm.setFuncionariosNaCaixa sempre o cara lido da sessão.
Eu não sei o que você está fazendo dentro de setFuncionariosNaCaixa mas com certeza, pra aparecerem valores diferentes para cada usuário, faz-se necessário algo que diga que é outro usuário conectado, entendes o que eu quero dizer?
Pelo seu exemplo eu estou entendendo isso, posso estar enganado.
Se você ainda não entendeu o que eu quis dizer, coloque aqui o conteúdo completo da sua classe.