Intereting Posts

PHP-массив, хранящийся в сеансе, имеет значение null, если мы инициализируем массив с тем же самым ключом, это проблема с кодировкой или проблема с php?

вот код, который я пытаюсь выполнить, он отлично работал на моем localhost и другом сервере PHP версии 5.3.2-1ubuntu4.11, но это создает проблему в PHP версии 5.2.17 на общем хостинге

<?php /* PHP version PHP Version 5.2.17 * Server API CGI/FastCGI */ session_start(); $products = array(); if (!isset($_SESSION['products'])) { $products = array("somedata1", "somedata2", "somedata3"); $_SESSION['products'] = serialize($products); $_SESSION['test_products'] = serialize($products); echo "<br/>session products<br/>"; print_r(unserialize($_SESSION['products'])); echo "<br/>session test_products<br/>"; print_r(unserialize($_SESSION['test_products'])); } else { echo "<br/>session products<br/>"; print_r(unserialize($_SESSION['products'])); echo "<br/>session test_products<br/>"; print_r(unserialize($_SESSION['test_products'])); } ?> 

На выходах первого запуска

 session products Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 ) session test_products Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 ) 

но при перезагрузке

 session products Warning: unserialize() expects parameter 1 to be string, array given in /home/uaustral/public_html/itoi/test.php on line 17 session test_products Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 ) 

Тот же код отлично работает на моей PHP-версии PHP версии 5.3.2-1ubuntu4.11

Я что-то упускаю (это автоматически исправляется в новой версии PHP) или это ошибка PHP для старой версии?

Если вы работаете с включенным register_globals , любой элемент массива в $_SESSION также известен как переменная с помощью этого ключа:

С register_globals :

 <?php session_start(); var_dump($products); 

Должна показать вам несериализованную строку. Потому что вы позже скажете $products = array(); вы неявно изменяете $_SESSION['products'] . Решение: отключить register_globals и на стороне примечание: вам не нужно сериализовать эти данные, сеанс может содержать многомерные массивы просто отлично. Просто убедитесь, что все необходимые определения классов загружены перед вызовом session_start или имеют функцию автозагрузки.

Я думаю, что этот пост поможет вам:

http://www.phphelp.com/forum/index.php?topic=11483.0

«Сейчас он работает … Я сравнивал файлы php.ini с моей машиной и производственным сервером. Я отключил« Register Globals »в файле php.ini на рабочем сервере, и теперь тележка работает отлично! Благодаря"

Посмотрите, помогает ли это:

http://www.php.net/manual/en/function.unserialize.php#105588 .

функция session_decode даже говорит об этом.