[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP Warning: session_start(): Failed to decode se
AndrewFi
Доброе время суток уважаемые эксперты.
С некоторых пор возникли проблемы с сессиями.
А точнее при переходе на php 5.5.
PHP Warning: session_start(): Failed to decode session object. Session has been destroyed in .....
Сессии хранятся в БД. Уже более пяти лет не возникало никаких проблем.
Использую Ubuntu dedicate server- mysql 5.6.27 - Apache/2.4.7 (Ubuntu) - PHP Version 5.5.9.

Часть настроек:
<IfModule mod_php5.c>
php_admin_flag display_errors off
php_admin_flag log_errors off
php_admin_flag register_argc_argv on
php_admin_flag register_long_arrays on
php_admin_flag register_globals off
php_admin_flag session.bug_compat_warn on
php_admin_flag session.bug_compat_42 on
php_admin_value session.auto_start 0
php_admin_value session.use_only_cookies 0
#php_admin_value session.serialize_handler php
php_admin_value session.save_handler user
php_admin_value session.gc_probability 1
php_admin_value session.gc_divisor 100
php_admin_value session.use_cookies 1
</IfModule>


Структура таблицы:

CREATE TABLE `gsmb2b`.`user_session` (
`session_id` varchar(80) NOT NULL,
`session_data` longtext,
`session_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`session_user` int(10) unsigned DEFAULT NULL,
`session_ip` bigint(20) unsigned NOT NULL,
`session_country` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`session_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Логи БД показывают, что данные записываются и читаются корректно.
Чувствую что ПХП не может преобразовать прочитанные данные БД.
Причем ошибка носит какой-то плавающий характер....

Долблюсь уже второй день. Жду ваших советов
Guest
А какие данные ты в сессии хранишь?
Говорят, что такое может быть если сохранять в сессию строки в мультибайтовой кодировке.
AndrewFi
Цитата (Guest @ 24.11.2015 - 02:10)
А какие данные ты в сессии хранишь?
Говорят, что такое может быть если сохранять в сессию строки в мультибайтовой кодировке.

Данные могут быть произвольные. $_SESSION есть $_SESSION.
Что я только не делал. Даже при записи - чтении использовал base64_encode - base64_encode.
Все тоже самое. Причем ошибка какая-то "плавающая".
При замене session.save_handler user на files - все ОК, но мне надо user (хранить в БД)
icedfox
AndrewFi, строку с ошибкой покажите и данные в момент ошибки . Источников может быть несколько, например при serialize_handler
AndrewFi
Цитата (icedfox @ 24.11.2015 - 07:04)
AndrewFi, строку с ошибкой покажите и данные в момент ошибки . Источников может быть несколько, например при serialize_handler

Сделал, чтобы при чтении-записи создавался лог данных в файле.
Заметил, что при чтении данных сессии из БД часть данных заменлась всякой кракозяброй, хотя переданные данные на запись в БД - в порядке.
Кодировка клиента и бд - utf8.

Непонятно, в чем дело

Файл с логом я прилагаю

Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/


collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
icedfox
AndrewFi с большой долей вероятности проблема с кодировкой, перепроверьте сами файлы, плюс возможно есть операции , в которых желательно указывать кодировку, такие как mb_..... например

Цитата (AndrewFi @ 25.11.2015 - 06:53)
Заметил, что при чтении данных сессии из БД часть данных заменлась всякой кракозяброй, хотя переданные данные на запись в БД - в порядке.

Проверьте эти такие данные тут же в базе, в каком виде они там хранятся.
AndrewFi
Цитата (icedfox @ 25.11.2015 - 11:46)
AndrewFi с большой долей вероятности проблема с кодировкой, перепроверьте сами файлы, плюс возможно есть операции , в которых желательно указывать кодировку, такие как mb_..... например

Цитата (AndrewFi @ 25.11.2015 - 06:53)
Заметил, что при чтении данных сессии из БД часть данных заменлась всякой кракозяброй, хотя переданные данные на запись в БД - в порядке.

Проверьте эти такие данные тут же в базе, в каком виде они там хранятся.

Данные на сервере хранятся нормально. Проблема, которая была обнаружена в файле лога, это что при чтении с БД это кракозябры вылазят. Соответственно при старте сессии невозможно нормально декодировать данные и все накрывается.

заметил (там же в логе), что нормально не декодируются объекты (данные класса).
Пробовал перед записью-чтением данных БД самостоятельно кодировать-декодировать (например base64_decode base64_encode) - результат тот же.

Странно, что несколько лет работало без всяких проблем. С использованием session.save_handler files - проблем нет
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.