Pergunta

Então, eu estou fazendo alguma manutenção em um site PHP que está usando variáveis ??$_SESSION. Eu comecei a ver um comportamento muito estranho e depois de horas de depuração Eu só descobri isso. Como exemplo, digamos que eu tenho uma configuração variável de sessão como esta:

$_SESSION['user']['id'] = 123;
$_SESSION['user']['firstname'] = 'John';
$_SESSION['user']['lastname'] = 'Doe';

Em um ponto em um script, uma chamada para uma tabela MySQL é feita usando algumas classes Zend:

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

Agora, aqui é onde começa estranheza ... Após esta chamada de banco de dados é feito, o meu valor de matriz $_SESSION['user'] é de repente mudou para ser o objeto que é recuperado do banco de dados chamar ...

Basicamente: $_SESSION['user'] agora é o mesmo que o objeto que foi recuperada usando o método fetchRow DB que era para ser armazenado no $user variável. Eu nunca vi isso antes.

A única coisa que eu consigo entender é porque o nome da variável $user é o mesmo que o nome chave do array $_SESSION['user'], sua atuação como como um atalho ou algo assim.

Trata-se de algum tipo de atalhos de sessão PHP estranhas que eu nunca ouvi falar de antes?

Em uma nota lateral, eu sei que o acesso $_SESSION vars diretamente não é a melhor prática. Eu não construir este site. Meu trabalho é apenas para corrigir algumas coisas e adicionar alguns recursos.

UPDATE: o suficiente Claro, register_globals está ligado. Obrigado pela ajuda caras rápidas. Não admira que eu estava vendo tal comportamento estranho.

Foi útil?

Solução

Parece que você tem register_globals acionado no PHP.ini. Desligá-lo deve corrigir isso.

Se você não tem acesso para alterar PHP.ini uma solução alternativa é discutido aqui

Outras dicas

Verifique se registrar globais é ligado. Acessando $ _SESSION é a única maneira de dados sessão de acesso com segurança .

Register globals é uma característica antiga que virou variáveis ??globais em variáveis ??locais. O problema com que foi que você não sabe com segurança onde os dados estava vindo. Algo que você espera de uma sessão pode ser definido com um get, post ou uma variável cookie. Por isso, foi muito fácil para a segurança do desvio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top