Diğer ilgisiz nesneler tefrika edildiğinde Neden nesneler dizeleri haline ediliyor?

1 Cevap php

Benim eski işveren sunucusu bu geçmiş hafta sonu köklü ve görünüşe sunucu sağlayıcı PHP kodu etkileyen sunucuya değişiklik yapıldı.

Ortaya çıkmış bir sorun nesneleri seri ile ilgilidir. Nesneleri tefrika edildikten ve diğer nesneleri tefrika olmak, böylece kod kırma dizelere dönüştürülür ediliyor değil. Sunucu hacklendi önce bu kod çalıştı.

Buradaki budur:

$plate = new Plate();
$plate2 = clone $plate;
gettype($plate); // Prints "object"
gettype($plate2); // Prints "object"

$_SESSION['plate'] = serialize($plate);

gettype($plate); // Prints "string"
gettype($plate2); // Prints "string"


$plate = new Plate();
$plate2 = new Plate();
gettype($plate); // Prints "object"
gettype($plate2); // Prints "object"

$_SESSION['plate'] = serialize($plate);

gettype($plate); // Prints "string"
gettype($plate2); // Prints "string"

Eğer nesneleri görmek gibi, hatta tefrika edildikten değil, dizelere dönüştürülür ediliyor. Herhangi bir yorumlara?

EDIT: Onlar üzerinde kayıt globalleri PHP 5.2.12 yayınlanıyor.

1 Cevap

Update: I half PHP 5.3.1 üzerinde test davanın yeniden ama ben register_globals olarak ayarlandığında yalnızca, On:

session_start(); // obviously

class Plate  // to have something on my plate
 {

    var $Member1;
    var $Member2;

 }

$plate = new Plate();
$plate2 = clone $plate;
echo gettype($plate); // Prints "object"
echo gettype($plate2); // Prints "object"

$_SESSION['plate'] = serialize($plate);

echo gettype($plate); // Prints "string"
echo gettype($plate2); // Prints "object", unlike in your example

$plate = new Plate();
$plate2 = new Plate();
echo gettype($plate); // Prints "object"
echo gettype($plate2); // Prints "object"
$_SESSION['plate'] = serialize($plate);

echo gettype($plate); // Prints "string"
echo gettype($plate2); // Prints "object", unlike in your example

$plate2 benim için her zaman olduğu gibi kalır. Belki bir yerde komik bir $plate2 = &something başvuru var? Bu gerçek kod var mı? Benim kod pasajı sisteminizde ne yapar?

Ben adamcağız parçası global değişkenler gibi $ _SESSION unitialized değişkenleri davranır $ _SESSION hata (ya da yan etkisi) ile ilgisi olduğunu düşünüyorum. this SO question bakın. Başka bir şey için oturum değişkenin adını değiştirmek bu çare olacak.

$_SESSION['session_plate'] = serialize($plate);  // $plate will remain unharmed

register_globals ayarını On yapılan sağlayıcı değişiklik oldu ise, o zaman da sağlayıcı dövdü gitmeli.