2012-05-09 3 views
11

Pracuję z Cakephp i mam problem z utrzymaniem sesji w subdomenach. Mój problem jest następujący:CakePHP przechowuje sesje z domeny głównej do subdomeny

  • Użytkownicy zalogować 'localhost/login'
  • Jeśli uwierzytelnionego są przekierowywane do 'customer.localhost/home'.

Obecnie Cake tworzy ciasteczko dla każdej domeny tj. Localhost i customer.localhost. Oznacza to, że nie mogę utrzymać sesji dla użytkownika. Czy istnieje sposób, aby domena plików cookie została naprawiona w domenie nadrzędnej w celu utrzymania sesji w subdomenach?

Próbowałem wprowadzić to w moim bootstrapie, ale nie ma to żadnego skutku: ini_set ('session.cookie_domain', '.localhost');

Jeśli uważasz, że nie można tego zrobić, proszę daj mi znać, żebym mógł odejść od tego frustrującego problemu.

Dziękujemy,

kSeudo

+2

Która wersja CakePHP używasz ? 1.3 lub 2.x? –

Odpowiedz

16

Sesje:

Aby uczynić cookie sesji ważna dla wszystkich subdomen oraz domeny najwyższego poziomu, to rzeczywiście trzeba mu ustawić się w swoją APP/config/bootstrap.php plik:

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

Następnie w APP/config/core.php f Ile ustaw Security niska:

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

"inaczej referer_check zostanie ustawiona na obecnym HTTP_HOST w linię obiektu CakeSession 441."



Cookies:

Na this page wyjaśnia, że ​​można użyć zmiennej 'domeny':

Nazwa domeny może uzyskiwać dostęp do plików cookie. np. Użyj ".twojadomena.com", aby zezwolić na dostęp ze wszystkich twoich subdomen.

Za ich przykładem kodu:

<?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

Dzięki Twojej pomocy, w końcu udało mi się.Jedna rzecz do zapamiętania, nie próbuj robić tego za pomocą "localhost", upewnij się, że używasz domeny na swoim hoście, takiej jak "example.com". – kSeudo

+0

pierwszy link jest martwy – tsukimi

+0

@tsukimi Dzięki - usunięte. – Dave

1

Jest config w app/config/core.php zmienić domenę pliku cookie sesji:

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

To nie działało dla mnie, ale przyjęta odpowiedź była. – drmonkeyninja

+0

Działa to, ale z prawą nazwą dyrektywy. Odpowiedź edytowana. – savedario