arquivos de sessões do php são incompatíveis? - php5.2 debian lenny vs php5.3 debian squeeze

1

php está truncando os arquivos da sessão para zero depois de migrar os arquivos da sessão do servidor um (debian lenny php 5.2) para o novo servidor (debian squeeze php 5.3).

eu crio uma sessão no servidor um com o createsession.php (veja abaixo) e posso ver o conteúdo da sessão com o dumpsession.php no mesmo servidor.

depois de copiar os arquivos da sessão do servidor um para o outro servidor e mudar para o servidor dois alterando meu arquivo de hosts locais, eu ainda tenho o mesmo cookie com o id de sessão correto armazenado no navegador, o novo servidor acessa a sessão correta arquivo, mas em vez de exibir o conteúdo da sessão, o servidor trunca o arquivo de sessão para zero e inicia uma nova sessão com o mesmo ID de sessão.

é possível migrar os arquivos da sessão? é o serverip de alguma forma hash no sessiondata?

o compartilhamento de sessão entre o php5.2 e o php5.3 é possível?

createession.php

<?php
  session_name('mysession');
  session_start();
  var_dump(session_id());
  var_dump($_SESSION);
?>

dumpsession.php

<?php
  session_name('mysession');
  session_start();
  var_dump(session_id());
  $_SESSION['foo'] = 'bar';
?>

parte da sessão do php.ini

[Session]
session.save_handler = files
session.save_path = "3;/var/lib/php5"
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly = 
session.serialize_handler = php
session.gc_divisor     = 100
session.gc_maxlifetime = 5184000
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

edite: minha solução estava mudando de volta para debian lenny.

    
por c33s 15.03.2011 / 12:34

2 respostas

1

Eu ficaria muito surpreso se tivesse mudado (não tenho acesso para me checar).

O que acontece se você copiar o arquivo da sessão para / tmp e, em seguida:

$s=('/tmp/sess_' . session_id);
print_r(unserialize(substr($s, strpos($s, '|')+1)));

Eu acho que é um pouco mais provável que o formato do arquivo de sessão tenha mudado em comparação com uma mudança no formato de serialize () - então apenas usar seu próprio manipulador de sessão pode resolver o problema.

Independentemente - se você estiver executando o site em várias máquinas, você deve tentar manter o mesmo software de configuração em cada uma delas - isso torna a vida muito mais simples.

    
por 15.03.2011 / 12:44
1

Você pode corrigir isso removendo o pacote php5-suhosin .

aptitude remove --purge php5-suhosin

Aparentemente, uma de suas novas funções é criptografar os dados da sessão, que foi ativada quando você atualizou do lenny para o squeeze.

Eu passei muito tempo trabalhando nisso!

    
por 05.05.2011 / 14:04