Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Variáveis ​​de sessão:quantos dados são demais?


Em primeiro lugar, as sessões PHP não são armazenadas na memória por padrão , eles são armazenados em disco, então cada bloco/sessão em que você escreve vai ocupar espaço em disco e não memória (até que você use PHP para ler os dados da sessão).

Sim, você está potencialmente sendo mais eficiente, mas não se quiser dimensionar e aqui está o porquê:

Armazenando dados em sessões


É perfeitamente aceitável armazenar algumas dados em sessões. Teoricamente, não há limite (embora eu nunca tenha tentado quebrá-lo ou mesmo empurrá-lo, apenas mude para uma solução mais eficiente). No entanto, você será limitado pelo espaço em disco e pelo PHP memory_limit() .

Muitas vezes, os dados armazenados em sessões incluem coisas como:
  • Nomes de usuário
  • Hashes
  • Datas de inscrição
  • Outras variáveis ​​(IDs/chaves de grupos de usuários, etc.)
  • Mensagens Flash
  • (NÃO senhas!)

No entanto, há uma troca. Se seu tráfego (e uso) aumentar e você estiver armazenando muitos dados em $_SESSION , você provavelmente começará a ver problemas, tanto em termos de uso de disco quanto de memória.

Eu não acho que haja qualquer problema com o que você está sugerindo, mas além dos itens que você listou e onde os exemplos acima se sobrepõem, é necessário cuidado.

Se você deseja dimensionar (horizontalmente) e reter sessões baseadas em disco, você tem opções ( sessões fixas ou rede de área de armazenamento são alguns), pois o disco em um servidor não armazena as mesmas sessões que um disco em outro servidor.

Local dos dados da sessão


Você pode encontrar o local onde o PHP armazena os dados da sessão chamando: session_save_path()

ou na CLI:
php -r 'echo session_save_path(), "\n";'

Você não mencionou seu sistema operacional, mas os locais comuns para os arquivos de sessão (em diferentes tipos de sistema operacional) são:
/tmp 
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp

As sessões armazenadas em disco geralmente têm nomes de arquivos que se parecem com isso usando ls -al :
-rw-------  1 www www      0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6

Vale a pena notar que geralmente há processos de coleta de lixo que limpam sessões inativas após períodos específicos. Ele varia de acordo com o sistema operacional, mas geralmente está presente em várias instalações baseadas em LAMP.

Outras opções/abordagens de armazenamento de sessão


Em seu banco de dados
Os dados da sessão geralmente são armazenados em um banco de dados em vez de no disco local e isso funciona bem para sites micro, pequenos e (dependendo de como é feito) médios com um nível razoável de tráfego.

Como qualquer outra solução, ela tem seus prós e contras (como ser capaz de banir/expulsar um usuário executando uma consulta em vez de excluir um arquivo de sessão de /tmp )

Na memória
para sites maiores (maior tráfego) e particularmente onde o volume de usuários simultâneos é alto, a memória é mais rápida de ler/gravar para variáveis ​​ou dados acessados ​​com muita frequência, em vez de adicionar carga indevida ao seu banco de dados. Ele pode e ainda deve ser gravado no banco de dados (consulte write-through caching ), mas também ser mantido na memória para acesso eficiente.

Uma técnica de mérito particular é o caching de memória . Um exemplo de solução de código aberto compatível com PHP amplamente usado é o Memcached , que pode ser usado em um servidor ou em vários [distribuídos]. Já vi isso usado por pequenas e grandes empresas e você só precisa ver quem usa/contribui...