AndrewFi
24.11.2015 - 01:06
Доброе время суток уважаемые эксперты.
С некоторых пор возникли проблемы с сессиями.
А точнее при переходе на 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;
Логи БД показывают, что данные записываются и читаются корректно.
Чувствую что ПХП не может преобразовать прочитанные данные БД.
Причем ошибка носит какой-то плавающий характер....
Долблюсь уже второй день. Жду ваших советов
А какие данные ты в сессии хранишь?
Говорят, что такое может быть если сохранять в сессию строки в мультибайтовой кодировке.
AndrewFi
24.11.2015 - 02:18
Цитата (Guest @ 24.11.2015 - 02:10) |
А какие данные ты в сессии хранишь? Говорят, что такое может быть если сохранять в сессию строки в мультибайтовой кодировке. |
Данные могут быть произвольные. $_SESSION есть $_SESSION.
Что я только не делал. Даже при записи - чтении использовал base64_encode - base64_encode.
Все тоже самое. Причем ошибка какая-то "плавающая".
При замене session.save_handler user на files - все ОК, но мне надо user (хранить в БД)
icedfox
24.11.2015 - 07:04
AndrewFi, строку с ошибкой покажите и данные в момент ошибки . Источников может быть несколько, например при serialize_handler
AndrewFi
25.11.2015 - 04:53
Цитата (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
25.11.2015 - 11:46
AndrewFi с большой долей вероятности проблема с кодировкой, перепроверьте сами файлы, плюс возможно есть операции , в которых желательно указывать кодировку, такие как mb_..... например
Цитата (AndrewFi @ 25.11.2015 - 06:53) |
Заметил, что при чтении данных сессии из БД часть данных заменлась всякой кракозяброй, хотя переданные данные на запись в БД - в порядке. |
Проверьте эти такие данные тут же в базе, в каком виде они там хранятся.
AndrewFi
25.11.2015 - 11:55
Цитата (icedfox @ 25.11.2015 - 11:46) |
AndrewFi с большой долей вероятности проблема с кодировкой, перепроверьте сами файлы, плюс возможно есть операции , в которых желательно указывать кодировку, такие как mb_..... например
Цитата (AndrewFi @ 25.11.2015 - 06:53) | Заметил, что при чтении данных сессии из БД часть данных заменлась всякой кракозяброй, хотя переданные данные на запись в БД - в порядке. |
Проверьте эти такие данные тут же в базе, в каком виде они там хранятся.
|
Данные на сервере хранятся нормально. Проблема, которая была обнаружена в файле лога, это что при чтении с БД это кракозябры вылазят. Соответственно при старте сессии невозможно нормально декодировать данные и все накрывается.
заметил (там же в логе), что нормально не декодируются объекты (данные класса).
Пробовал перед записью-чтением данных БД самостоятельно кодировать-декодировать (например base64_decode base64_encode) - результат тот же.
Странно, что несколько лет работало без всяких проблем. С использованием session.save_handler files - проблем нет
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.