Para verificar: você tem a capacidade de editar o PHP, certo?
Peter Taylor
Se for seu próprio aplicativo, sugiro o que @Jacob Hume abaixo sugeriu e altere seu aplicativo para armazenar sessões em uma tabela de banco de dados. Isso, na minha opinião, oferece mais controle sobre o seu site, pois você pode forçar os usuários a sair, se necessário de forma seletiva.
Anagio
Eu posso editar PHP. Estou usando um CMS (Drupal). Também estou usando a APC e estava procurando uma solução dessa maneira.
Dowik 13/03/12
Respostas:
6
Armazenar um token de sessão em um local alternativo como um backup impediria esse problema. Você ainda pode manter suas informações principais $_SESSION, mas mantenha um token de backup em:
Obrigado pela resposta e obrigado pelo link. Eu estava procurando uma solução no arquivo de configuração do lado do servidor (tipo "manter sessões durante a reinicialização"). Mas parece que a solução está no lado do aplicativo.
Dowik 13/03/12
Oh meu ... Na verdade, eu estava simplesmente procurando por "apache2ctl -k graceful"!
Dowik 13/03/12
3
Os dados da sua sessão não devem ser perdidos apenas porque o Apache é encerrado ou reiniciado, a menos que os dados da sessão estejam sendo armazenados na memória e não sejam armazenados em backup no disco (pelo sistema de arquivos ou pelo banco de dados). Caso contrário, você poderá reiniciar o servidor inteiro e a sessão ainda persistirá. Os dados da sessão foram projetados para serem armazenados a longo prazo. A única vez que a sessão é perdida é se:
O SID está perdido. Os dados da sessão ainda existem no lado do servidor, mas o cliente não consegue recuperar o SID, portanto, não pode reiniciar a mesma sessão. Isso pode acontecer se o cookie SID expirar (se for um cookie) ou se os links da sessão forem perdidos (se o SID for um parâmetro de URL) ou se o SID estiver desconfigurado no servidor ou alterado sem notificar o cliente.
Os dados da sessão são excluídos do lado do servidor. Isso geralmente acontece quando o PHP Session Garbage Collector é executado e vê que o arquivo da sessão é mais antigo que session.gc_maxlifetime (que é de 24 minutos por padrão). Caso contrário, isso pode acontecer se o aplicativo excluir explicitamente a sessão . Em alguns servidores, o administrador também pode ter configurado um cronjob para limpar regularmente os dados antigos da sessão.
Obrigado pelos detalhes. Eu vou investigar dessa maneira. Mas agora, vou simplesmente usar o reinício gracioso que parece atender à minha necessidade.
Dowik 13/03/12
@dowik: Como um reinício gracioso se ajusta à sua necessidade? O seu problema perdeu sessões ou downloads interrompidos? Se for o último, o reinício / desligamento gracioso realmente resolverá isso. Mas você deve editar sua pergunta para refletir isso. Como as reinicializações simples não têm nada a ver com as sessões PHP, e isso não ajudará outros usuários que tentam impedir a perda de sessões.
Lèse majesté 13/03/2012
Eu tentei atualizar o título da minha pergunta substituindo "sessões PHP" por "sessões de usuários", como descrever no corpo da minha pergunta. Melhor para você? Para ser mais preciso: eu uso a APC. Quando altero o código nos arquivos PHP, preciso liberar o cache da APC (reiniciar o Apache é a maneira mais simples de fazer isso). Com o argumento "restart", os usuários do meu site precisam fazer login novamente. Enquanto com "gracioso", eles não. É por isso que "isso parece atender à minha necessidade".
Dowik 13/03/12
@dowik: Eu não acho que isso tenha algo a ver com o reinício gracioso. Você provavelmente teve uma reinicialização que coincidiu com o coletor de lixo das sessões PHP. Entre novamente e tente reiniciar regularmente imediatamente depois. A menos que você esteja armazenando sessões na memória (MM), a sessão será salva.
Lèse majesté 13/03/2012
1
Tornado possível usando o argumento correto com o Apache:
apache2ctl -k graceful
O Apache será reiniciado sem perder as sessões atuais.
Respostas:
Armazenar um token de sessão em um local alternativo como um backup impediria esse problema. Você ainda pode manter suas informações principais
$_SESSION
, mas mantenha um token de backup em:Você pode encontrar ajuda nesta pergunta do StackOverflow: práticas recomendadas para o tempo limite da sessão e o login persistente no php .
fonte
Os dados da sua sessão não devem ser perdidos apenas porque o Apache é encerrado ou reiniciado, a menos que os dados da sessão estejam sendo armazenados na memória e não sejam armazenados em backup no disco (pelo sistema de arquivos ou pelo banco de dados). Caso contrário, você poderá reiniciar o servidor inteiro e a sessão ainda persistirá. Os dados da sessão foram projetados para serem armazenados a longo prazo. A única vez que a sessão é perdida é se:
O SID está perdido. Os dados da sessão ainda existem no lado do servidor, mas o cliente não consegue recuperar o SID, portanto, não pode reiniciar a mesma sessão. Isso pode acontecer se o cookie SID expirar (se for um cookie) ou se os links da sessão forem perdidos (se o SID for um parâmetro de URL) ou se o SID estiver desconfigurado no servidor ou alterado sem notificar o cliente.
Os dados da sessão são excluídos do lado do servidor. Isso geralmente acontece quando o PHP Session Garbage Collector é executado e vê que o arquivo da sessão é mais antigo que session.gc_maxlifetime (que é de 24 minutos por padrão). Caso contrário, isso pode acontecer se o aplicativo excluir explicitamente a sessão . Em alguns servidores, o administrador também pode ter configurado um cronjob para limpar regularmente os dados antigos da sessão.
fonte
Tornado possível usando o argumento correto com o Apache:
O Apache será reiniciado sem perder as sessões atuais.
fonte