Por sua natureza, uma aplicação escalável deve tratar a sessão de usuário de forma centralizada. Ao invés de salvar em disco, recomenda-se utilizar um storage externo ao container, como Memcached, Redis ou até mesmo o banco de dados.
O PHP já possui suporte nativo a este mecanismo. Basta definir o tipo de backend de sessão na configuração.
Memcached
Adicione um container de memcached em seu projeto, com o nome "memcached".
Crie o arquivo .htaccess na raiz do repositório git da sua aplicação:
php_value session.save_handler memcache
php_value session.save_path tcp://memcached:11211
A URI "tcp://memcached:11211" aponta para o serviço "memcached" na porta "11211". Mais info na documentação oficial.
Banco de dados
Para salvar sessões em um banco de dados você precisa implementar um manipulador de sessões personalizado. Um tutorial pode ser encontrado em http://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/
Cookie
Salvar sessões em um banco ou memcache pode levar a sobrecarga no backend. Para solucionar isso podemos salvar os dados de sessão no próprio navegador do cliente. Portanto devemos tomar cuidado para gerar somente cookies assinados, evitando assim que o usuário altera os dados livremente.
O truque está em calcular o hash dos dados gerados no servidor e envia dados+hash na sessão. Ao retornar, o hash é calculado novamente e batido com o hash enviado pelo cliente - se não bater significa que o cliente alterou alguma coisa.
Você pode encontrar uma implementação desta idéia em https://github.com/stevencorona/SessionHandlerCookie.
Comentários
0 comentário
Por favor, entre para comentar.