Variáveis de sessão não persistentes no PHP5 / Apache2 / Ubuntu12

5

Eu tenho um site que usa variáveis de sessão (em PHP) para saber se o visitante está entrando no site ou não. Se ele é novo, então eu o redireciono para o idioma detectado. Mas se ele não é novo, você o deixa ir onde ele quiser (até as páginas em outros idiomas).

O problema é que a variável usada para conseguir isso ($ _SESSION ["knownvisitor"]]) não é persistente. Eu testei o mesmo site em outro servidor e funciona muito bem, então eu tenho certeza que é um problema de configuração de sessões. O servidor problemático é um servidor Ubuntu 12.04.4 com Apache 2.2.22 e PHP 5.3.10.

As sessões são armazenadas em "/ var / lib / php5", e eu posso ver os arquivos lá, mas eles estão vazios. Os arquivos da sessão pertencem a "www-data" e possuem os seguintes direitos "-rw -------". O diretório, por outro lado, pertence a "root" e tem esses direitos "drwx-wx-wt".

Eu tentei usar "session_write_close ()" antes de redirecionar, como recomendado em alguns fóruns, sem sorte. O redirecionamento é como "cabeçalho ('Localização: [URL]')".

Aqui está o código do script para que você possa entender seu comportamento básico. Isso é o que eu coloco no começo de todos os arquivos na minha web:

function detectedlang($availlangs)
{
 // FUNCTION STUFF HERE TO FIND OUT WHICH IS THE LANGUAGE OF THE VISITOR
 return $detectedlang;
}

session_start();

if (!isset($_SESSION["knownvisitor"]))
{
 $detectedlang = detectedlang(array("en", "es"));
 $_SESSION["knownvisitor"] = true;
 header("Location: http://www.mysite.com/".$detectedlang);
}
    
por Diego 30.03.2014 / 20:52

1 resposta

4

Você disse que /var/lib/php5/session pertence a root e tem permissões drwx-wx-wt . Isso significa que todos os usuários podem escrever no diretório, mas somente o root pode ler . O resultado é que o PHP pode criar arquivos de sessão, mas não pode voltar e lê-los mais tarde. Parece ser por isso que suas sessões estão falhando.

Corrija a propriedade e as permissões para que www-data possa ler e escrever ( rwx ). Por exemplo:

chgrp www-data /var/lib/php5/session
chmod g+rwx /var/lib/php5/session
    
por 30.03.2014 / 21:00