2013-09-25 5 views
17

Я получаю эту ошибку:CakePHP Ошибка: Не удается настроить сеанс, настройки session.auto_start не удалось

Error: [CakeSessionException] Unable to configure the session, setting session.auto_start failed.

Я использую CakePHP 2.2.4.

EDIT

Кажется, этот парень был один и тот же вопрос: Cakephp Session error on live site и используя этот

if(!isset($_SESSION)) session_start(); 

внутри beforefilter метода AppController исправить ошибку.

Так что мой вопрос: почему это произошло? Все работало нормально, а затем грубо, эта ошибка появилась. Кроме того, я понял, что папка app/tmp/sessions пуста, и я настроил сеанс для обработки Cake (в Config/core.php).

+0

Если бы это так же из ниоткуда. Обновление последней версии Cake исправило это, похоже, они, возможно, проделали определенную работу по настройке сеанса ... –

+0

@bateman_ap Хорошо, я попробую –

+0

@bateman_ap Какая версия? – BadHorsie

ответ

20

В PHP версии 5.4.19 - разработчики закрыли возможность установить session.auto_start опцию из пользовательского сценария.

CakePHP удалил эту опцию из конфигурации сеанса по умолчанию только в версии 2.4.0.

Итак, у вас есть 3 основных варианта: обновить CakePHP, понизить PHP или использовать стандартный сеанс php.

+0

Модернизация CakePHP решила мою проблему. Миллион спасибо за этот ответ :) – trante

+0

Или есть простой комментарий исправить, см. Мой другой ответ ниже ... –

8

Как Andriy's answer says, вы должны обновить CakePHP или понизить PHP. Однако, если вы не хотите или не имеете возможности, вам нужно перенастроить сеанс Cake, чтобы он использовал стандартные сессии PHP, а не сессию Cake.

приложение/Config/core.php

Configure::write('Session', array(
    'defaults' => 'cake', // You need to change the value of this to 'php' 
    'timeout' => 120, 
    'cookieTimeout' => 20160, 
    'checkAgent' => false 
)); 
+0

Спасибо. Да, я использую 1 и 1 общий хостинг. Полагаю, я должен их переслать. –

24

Ответ Андрея Струка верен. Он сказал: Итак, у вас есть 3 основных варианта: обновить CakePHP, понизить PHP или использовать стандартные сессии PHP.

Но есть четвёртый вариант, вы можете просто закомментировать одну строку в /lib/Cake/Model/Datasource/CakeSession.php (около линии 557):

// 'session.auto_start' => 0, 

Это останавливает торт вызов ini_set() на этой установке и предотвращает фатальную ошибку ,

+0

любые недостатки этого метода реализации? –

+0

Я пока не нашел. Я не верю, что когда-либо можно было изменить этот параметр * внутри скрипта *, это просто так, поскольку PHP-версия 5.4.19 теперь фактически терпит неудачу, вместо того, чтобы молча делать ничего. –

+0

Работал для меня, но мне интересно, есть ли у этого метода какие-либо ограничения, являются ли сеансы уязвимыми сейчас? – indago

5

В файле php.ini, попробуйте установить session.auto_start 1.

+0

Не идеальное решение, но, безусловно, действительное исправление. –

0

как я не хватает репутации комментировать, я добавляю следующий ответ в дополнение к Симонову один:

, чтобы получить он работал, мне пришлось прокомментировать все три вхождения 'session.auto_start' => 0 (около и после строки 557 в CakeSession.PHP)

Для получения дополнительной информации см следующего патча команды CakePHP: https://github.com/cakephp/cakephp/commit/faa2cbd3c3fc1bbf83064727847789123110b8e3#diff-bd8dc176fa0f41743dbaafa75f77b5ae

Смежные вопросы