Сообщение об ошибке при входе в Kohana - PullRequest
3 голосов
/ 11 августа 2011

Я использую 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'
        ),
    ),
);

?>

В чем здесь проблема?

Спасибо!

Ответы [ 6 ]

4 голосов
/ 20 декабря 2011

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

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

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

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

0 голосов
/ 21 декабря 2013

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

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


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

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) Как правильно удалить куки сеанса?

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

0 голосов
/ 21 августа 2012

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

$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();
    }
  }

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

0 голосов
/ 11 января 2012

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

0 голосов
/ 15 декабря 2011

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

session.auto_start = 0

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

0 голосов
/ 14 августа 2011

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

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

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

...