Почему Kohana 3.3 Error reading session data при любом вызове сессии, после OAuth?

Коллеги!
Не сплю вторую ночь.
Подключил модули facebook и google oath к Kohana.
По началу все работало и я не заметил когда все сломалось.

Может быть кто-то сталкивался с подобным?

facebook и google в процессе аутентификации, создают свою сессию.
Здесь и происходит конфликт.
Когда я первый раз с этим столкнулся, то помогло создание собственного конфига сессий:

<?php defined('SYSPATH') OR die('No direct script access.');

return array(
    'native' => array(
        'name' => sha1(URL::base()),
        'lifetime' => 43200,
        'encrypted' => FALSE,
    ),
    'cookie' => array(
        'name' => 'cookie_name',
        'encrypted' => TRUE,
        'lifetime' => 43200,
    ),
    'database' => array(
        'name' => 'cookie_name',
        'encrypted' => TRUE,
        'lifetime' => 43200,
        'group' => 'default',
        'table' => 'table_name',
        'columns' => array(
            'session_id'  => 'session_id',
            'last_active' => 'last_active',
            'contents'    => 'contents'
        ),
        'gc' => 500,
    ),
);


Но при дальнейшей разработке инцидент повторился и уже ничто не может помочь.
BOM-вычистил из всех файлов, а их более 600-сот.

Сообщение об ошибке:
Session_Exception [ 1 ]: Error reading session data.
SYSPATH\classes\Kohana\Session.php [ 324 ]
319 			}
320 		}
321 		catch (Exception $e)
322 		{
323 			// Error reading the session, usually a corrupt session.
324 			throw new Session_Exception('Error reading session data.', NULL, Session_Exception::SESSION_CORRUPT);
325 		}
326 
327 		if (is_array($data))
328 		{
329 			// Load the data locally
SYSPATH\classes\Kohana\Session.php [ 125 ] » Kohana_Session->read(arguments)
SYSPATH\classes\Kohana\Session.php [ 54 ] » Kohana_Session->__construct(arguments)
MODPATH\auth\classes\Kohana\Auth.php [ 58 ] » Kohana_Session::instance(arguments)
MODPATH\auth\classes\Kohana\Auth.php [ 37 ] » Kohana_Auth->__construct(arguments)
APPPATH\classes\Controller\login.php [ 81 ] » Kohana_Auth::instance()
76 			{
77 				Auth::instance()->force_login($user);
78 				$this->redirect('login/login');
79 			}
80             
81 			if(Auth::instance()->logged_in()) {
82 				Model::factory('User')->link_user_facebook_id($fb_id);
83 				$this->redirect('login/login');
84 			} else {			
85 				$user_data = Model::factory('Facebook')->parse_fb_info($fb->api('/me'));
86 				//Model::factory('User')->create_user_from_google_id($user_data);

Ошибка возникает в 81й строке.

На экране мой контроллер login, который выполняет action facebook. Если пользователь залогинен в FB, то возврат происходит сюда же, но уже должна сработать функция, которая принудительно логинит пользователя, найденного в БД по Facebook_id штатными средствами Auth.

Подскажите, что еще можно попробовать ткнуть палкой?
  • Вопрос задан
  • 5092 просмотра
Пригласить эксперта
Ответы на вопрос 1
NikitaTratorov
@NikitaTratorov Автор вопроса
CTO
Единственное внятное объяснение есть здесь: stupid.su/kohana-3_orm_auth_session
НО решение не помогло.

Session conflict

При использовании session Native driver и сторонних библиотек и модулей (например Hybridauth) могут возникать конфликты по причинам:

невозможность чтения/записи зашифрованной cookie;
использование сторонними библиотеками session_start();
— что может приводить к ошибке:

Session_Exception [ 1 ]: Error reading session data.

Наиболее простым решением будет использование базы данных для хранение сессий Kohana, однако, есть и другие варианты решения, такие как передача в session_start() текущего $_session_id или замена его в сторонних модулях на Session::instance().

Важно: вышеупомянутая ошибка может встречаться и по причине банальной невозможности записи/чтения данных сессии, например из-за недоступности/недостатка прав на запись в session.save_path (каталог хранения файлов сессий PHP, см. php.ini)


Опытным путем выяснил, что в принципе не работает класс Auth. Где-то я его сломал.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы