Django, mod_python, sessões apache e excêntrico

votos
1

Estou executando um Django através mod_python no Apache em uma máquina Linux. Eu tenho um backend de autenticação personalizada, e middleware que requer autenticação para todas as páginas, exceto conteúdo estático.

Meu problema é que depois que eu entrar, eu ainda vai ter aleatoriamente o log na tela e agora novamente. Parece-me que cada processo apache tem seu próprio processo de python, que por sua vez tem seu próprio internos. Então, enquanto eu obter servido pelo mesmo processo que eu conectado para, tudo é fino e elegante. Mas se o meu pedido fica servido por um processo de apache diferente, eu não sou mais autenticado.

Fui verificar os cabeçalhos HTTP I enviar com FireBug, e eles são a mesma coisa de cada vez, ou seja. mesmo cookie.

É este um problema conhecido e existem soluções alternativas / correções?

Edit: Eu tenho uma página que exibe uma série de imagens geradas. Alguns off estes não serão exibidos. Isso é porque eles estão muito atrás do middleware de autenticação, então eles vão colocar aleatoriamente uma imagem de login. No entanto, refrescante desta página vezes suficientes, e que acabará por funcionar, o que significa que todos os processos de reconhecer a minha sessão.

Publicado 03/10/2008 em 12:10
fonte usuário
Em outras línguas...                            


5 respostas

votos
2

Você está correto sobre como Apache lida com os processos, e às vezes você vai ser servido por um processo diferente. Você pode ver isso quando você faz uma alteração em seu site; novos processos vai pegar a mudança, mas processos antigos lhe dará o site antigo. Para obter consistência, você tem que reiniciar o Apache.

Assumindo uma reinicialização não corrigir o problema, eu acho que é algo no "autenticação backend personalizado" armazenar parte da autenticação na memória (que não vai funcionar muito bem para um servidor web). Gostaria de tentar definir MaxRequestsPerChilda 1 em sua configuração do Apache e ver se você ainda obter a tela de login. Se fizer isso, algo está sendo armazenado na memória, talvez um modelo não ser salvo?

Espero que ajude!

PS Só por curiosidade, por que você está usando um backend de autenticação personalizada e um middleware para garantir que o usuário está logado? Parece contrib.auth do Django e @login_required seria mais fácil ...

Respondeu 03/10/2008 em 13:15
fonte usuário

votos
0

Como garantir que a sessão não é limpo depois de Apache reiniciar (ou parar e iniciar)?

Porque quando eu atualizar meu código-fonte e reiniciar o Apache, eu atualizar a página web e não tenho de login novamente. Sessão é perdida.

Sessão é armazenado no Memcache. Não faço ideia como e por que a sua apagada. Como preservar a sessão para que o usuário não precisa iniciar sessão após o reinício apache?

Respondeu 12/02/2013 em 11:53
fonte usuário

votos
0

Se você estiver usando algumas variáveis ​​globais para armazenar dados de sua sessão de autenticação personalizada, você precisa mudar isso para usar um arquivo, banco de dados ou memcached. Como dito acima mod_python lança alguns processos e não há memória compartilhada entre eles.

Eu recomendo usar o memcached para isso, também usamos cookies para armazenar ID da sessão ou passá-lo com como parâmetro GET para que mais tarde você pode facilmente extrair os dados da sessão do cache.

Respondeu 30/03/2009 em 22:12
fonte usuário

votos
0

Eu recomendo que você não definir MaxRequestsPerChild a 1, como que causaria tanta sobrecarga como cada processo é morto off e respawns com cada pedido.

Você está usando apaches pré-forma MPM ou trabalhador MPM?

Dê uma olhada em http://docs.djangoproject.com/en/dev/howto/deployment/modpython/?from=olddocs que pode lhe dar alguma ajuda

Respondeu 05/10/2008 em 05:00
fonte usuário

votos
0

Você tem sessões de banco de dados orientado padrão? É o cache ativado nas configurações?

Respondeu 03/10/2008 em 13:04
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more