Sessões Memcached e PHP

A maneira tradicional

Basicamente, quando escrevemos

session_start();

PHP atribui um novo id

session_id(); //just a random tweeks of letters and numbers...

e então cria um novo arquivo, digamos sess_7s6fko70u9d5gse4kp8a9a10q4 (ou seja, sess_ {SESSIONID} ) que contém os dados da nossa sessão.

O PHP gerencia sessões para nós, o que limpa sessões antigas / expiradas automaticamente usando alguns de seus próprios mecanismos.

Mas usar o sistema de arquivos para armazenar sessões é muito lento e é um gargalo para lidar com, digamos, milhares de usuários ao mesmo tempo. Mas e se quisermos ter um acesso muito mais rápido? aqui vem nosso Supeman “Memcached” para nos ajudar.

O que é Memcached

Memcached como o nome sugere, oferece uma maneira de armazenar dados na memória cache do sistema.

Vamos começar

PHP oferece uma maneira fácil, diferente de outras linguagens, de gerenciar nossas sessões com memcache

Tudo o que precisamos é instalar o memcached em nosso servidor e instalar um driver php para ele.

Como configurar?

Para usar o memcached para armazenar as sessões php, teremos que editar php.ini e substituir as configurações do gerenciador de arquivos padrão por algo como:

; Use memcache as a session handler
session
.save_handler = memcache
; Use a comma separated list of server urls to use for storage:
session
.save_path="tcp://<memcache_server>:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

Também podemos configurá-lo em tempo de execução usando o seguinte código:

ini_set('session.save_handler', 'memcache');
ini_set
('session.save_path', 'tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15');

Agora todos os nossos dados de sessão são armazenados diretamente no Memcached, o que parece ótimo 🙂 Mas e se o seu servidor for reiniciado ou algo der errado? Você prefere desconectar todos os seus usuários? Então, como fazer backup desses dados? Como o cache é volátil, precisamos de algo confiável em caso de falha. Tratará disso sobre como fazer backup dos dados da sessão com o MongoDB.

Agora vamos começar com as sessões,

session_start(); //starts a new session

//setting some session data's
$_SESSION
['u_id'] = 123;
$_SESSION
['u_name'] = "Some name";

Isso será armazenado de forma semelhante a abaixo,

7s6fko70u9d5gse4kp8a9a10q4 : u_id|i:123;u_name|s:9:"Some name";

O que eles são realmente?

7s6fko70u9d5gse4kp8a9a10q4 : Session ID and/or Cache Key

u_id
|i:123:
u_id
: Session key , i: Integer data type , 123: Value

Isso é ótimo, nossas sessões estão perfeitamente armazenadas 🙂 Mas onde ocorre o problema? Cada sessão, por padrão, é armazenada apenas por 1440 segundos.

Ops! estamos com problemas: / Mas não se preocupe quando podemos estendê-lo para mais 1440 segundos usando

session_regenerate_id(); //It regenerates new ID and resets expiry time

Sim, isso é bom, mas e se o usuário permanecer inativo por mais de 1440 segundos? Suas sessões serão apagadas e eles serão desconectados (isso é muito ruim: /). Como lidar com esses problemas?

Podemos, fazendo backup dos dados de nossa sessão no banco de dados (mais rápido em comparação com o sistema de arquivos) e, em seguida, consultar de tal forma que, se o Memcached falhar, voltaremos ao banco de dados para obter os detalhes da sessão.

Discutirei sobre como fazer backup dos dados da sessão na minha próxima dica profissional.

Aproveitar!