2012-05-09 4 views
11

Я работаю с Cakephp, и у меня есть проблема, поддерживающая сеанс по субдоменам. Моя проблема заключается в следующем:CakePHP ведет сеанс от основного домена до субдомена

  • Вход для пользователей на «локальный/логин»
  • Если аутентифицированного они перенаправляются на «customer.localhost/дома».

В настоящее время Cake создает cookie для каждого домена, то есть localhost и customer.localhost. Это означает, что я не могу сохранить сеанс работы для пользователя. Есть ли способ, чтобы весь домен cookie был зафиксирован в родительском домене с целью сохранения сеанса, работающего по субдоменам?

Я попытался ввести это в свой бутстрап, но он не имеет никакого эффекта: ini_set ('session.cookie_domain', '.localhost');

Если вы считаете, что этого не сделать, не стесняйтесь, дайте мне знать, чтобы я мог перейти от этой неприятной проблемы.

Большое спасибо,

kSeudo

+2

Какую версию CakePHP вы используете ? 1,3 или 2.x? –

ответ

16

Сессия:

Для того, чтобы куки сессий действительны для всех субдоменов и доменов верхнего уровня, вы на самом деле нужно, чтобы установить его самостоятельно в ваших APP/config/bootstrap.php файл:

ini_set('session.cookie_domain', '.domain.com'); 

Тогда в вашем APP/config/core.php е Ile, установите безопасность на низкий уровень:

Configure::write('Security.level', 'low'); 

"в противном случае referer_check будет установлена ​​в текущий HTTP_HOST в объект CakeSession линия 441."



Печенье:

На this page он объясняет, что вы можете использовать переменную 'домена':

Имя домена разрешен доступ к куки. , например. Используйте «.yourdomain.com», чтобы разрешить доступ со всех ваших поддоменов.

За их пример кода:

<?php 
public $components = array('Cookie'); 
public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Cookie->name = 'baker_id'; 
    $this->Cookie->time = 3600; // or '1 hour' 
    $this->Cookie->path = '/bakers/preferences/'; 
    $this->Cookie->domain = 'example.com'; 
    $this->Cookie->secure = true; // i.e. only sent if using secure HTTPS 
    $this->Cookie->key = 'qSI232qs*&sXOw!'; 
    $this->Cookie->httpOnly = true; 
} 
+0

Спасибо, что в итоге я получил его на работу.Одна вещь, которую нужно запомнить, не пытайтесь сделать это с помощью «localhost», убедитесь, что вы используете домен в своем хосте, например «example.com». – kSeudo

+0

первая ссылка - – tsukimi

+0

@tsukimi Thanks - удален. – Dave

1

Существует конфиг в приложение/Config/core.php изменить домен куки сессии:

Configure::write('Session', array(
    'defaults' => 'php', 
    'ini' => array(
     'cookie_domain' => '.example.com' 
    ) 
)); 
+0

Это не сработало для меня, но принятый ответ. – drmonkeyninja

+0

Это работает, но с правильным названием. Ответ отредактирован. – savedario

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