Я использую 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 (удалить все записи таблицы сеансов )