Сообщение об ошибке при входе в Кохану

Я использую Kohana 3, и у меня есть проблема при входе в систему с пользователем.

Я использую эту строку для входа в систему:

$success = Auth::instance()->login($_POST['login_user'], $_POST['login_password'], $remember); 

И я получил сообщение об ошибке:

 Session_Exception [ 1 ]: Error reading session data. ~ SYSPATH/classes/kohana/session.php [ 326 ] 

У меня есть таблица сеансов, созданная с помощью следующего SQL:

 CREATE TABLE `sessions` ( `session_id` varchar(24) NOT NULL, `last_active` int(10) unsigned DEFAULT NULL, `contents` text, PRIMARY KEY (`session_id`), KEY `sessions_fk1` (`last_active`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

А также session.php внутри папки config:

 <?php defined('SYSPATH') or die('No direct script access.'); return array( 'database' => array( /** * Database settings for session storage. * * string group configuation group name * string table session table name * integer gc number of requests before gc is invoked * columns array custom column names */ 'group' => 'default', 'table' => 'sessions', 'gc' => 500, 'columns' => array( /** * session_id: session identifier * last_active: timestamp of the last activity * contents: serialized session data */ 'session_id' => 'session_id', 'last_active' => 'last_active', 'contents' => 'contents' ), ), ); ?> 

Что может быть проблемой здесь?

Благодаря!

Session_Exception [1]: Ошибка чтения данных сеанса. ~ SYSPATH / classes / kohana / session.php [326]

Зависит от версии, в которой вы работаете, но это вызвано тем, что исключение генерируется, когда данные сеанса не read в процессе read . Здесь вы можете увидеть отчет об ошибке: Ошибки чтения сеанса должным образом игнорируются . Решением будет обновление до последней версии, если вы еще этого не сделали.

Что-то еще, что вам нужно посмотреть, это ваши данные сеанса. Вам нужно будет понять, почему ваши данные повреждены и не могут быть правильно прочитаны. Это может быть ошибка, __sleep кодом в __sleep .

Я не знаю, поможет ли это, но у меня была аналогичная проблема.

Причиной этого было то, что с использованием одной библиотеки (Facebook SDK) сессия была инициализирована на нем onw, а обработка сеанса была выполнена с использованием переменной $_SESSION . Я заметил, что было два файла cookie – session (идентификатор сеанса Kohanas) и PHPSESSID . Вероятно, это были проблемы.

Я изменил библиотеку так, чтобы идентификатор не начинал сеанс сам по себе, и проблема была решена.

Итак, вам нужно проверить, не запущена ли сессия в другом месте.

Обходным решением или решением для меня была установка php.ini

session.auto_start = 0

Конечно, перезагрузите свой веб-сервер

Не уверен, поняли ли вы это. Но у меня была такая же проблема, и это было связано с моей конфигурацией php. Я использую NGNIX и php-fpm. По умолчанию мои файлы сеансов пытались сохранить в директорию, которой не было. Поэтому я изменил session.save_path на допустимый путь и исправил его.

Один из способов решения этой проблемы – создать экземпляр экземпляра сеанса перед созданием экземпляра SDK для Facebook. Например:

 $this->_session = Session::instance('native'); $this->_facebook = new Facebook(array( 'appId' => 'app_id', 'secret' => 'app_secret', )); 

Если вы посмотрите на код внутри конструктора класса Facebook, вы увидите, что он проверяет, был ли запущен сеанс:

 public function __construct($config) { if (!session_id()) { session_start(); } parent::__construct($config); if (!empty($config['sharedSession'])) { $this->initSharedSession(); } } 

Поэтому, если вы сначала создадите сеанс, он пропустит этот блок кода.

У меня были такие проблемы при переходе на онлайн-сервер (более одного раза :(, поэтому лучше дать четкие указания).

Рекомендации :


§) Если вы используете адаптер сеанса базы данных :

 Session::$default = 'database'; 

i.- Проверьте правильность ваших учетных данных БД.
ii.- Убедитесь, что таблица, назначенная для данных sessions имеет правильный тип и размер.


§) Если вы используете шифрование для ваших данных сеанса ( config/session.php или config/.../session.php ):

 return array( 'cookie' => array( // ... 'encrypted' => TRUE, // ... ), 'database' => array( // ... 'encrypted' => TRUE, // ... ), ); 

i- Убедитесь, что у вас установлен mcrypt :

 $ php -m|grep mcrypt mcrypt // installed 

ii- Убедитесь, что вы используете тот же key который использовался для шифрования данных ( config/encrypt.php или config/.../encrypt.php ):

 return array( 'default' => array( 'key' => 'yabadabadoo!', 'cipher' => MCRYPT_RIJNDAEL_128, 'mode' => MCRYPT_MODE_NOFB, ), 

обходные

§) Если возможно удалить все данные сеанса и повторите попытку.

i) Для родного адаптера: удалите все (или только соответствующие вашему приложению) файлы сеансов, расположенные в …

Сохраняет данные сеанса в местоположении по умолчанию для вашего веб-сервера. Место хранения определяется session.save_path в php.ini или определяется ini_set .

ii) Для адаптера печенья: вручную удалите файлы cookie сеансов в браузерах, затронутых или программно (в случае многих затронутых пользователей): (PHP) Как правильно уничтожить cookie сеанса?

iii) Для адаптера базы данных: sessions TRUNCATE TABLE (удалить все записи таблицы сеансов )