Session CakePHP将会话从主域保留到子域

Session CakePHP将会话从主域保留到子域,session,cakephp,authentication,Session,Cakephp,Authentication,我正在与Cakephp合作,我在跨子域维护会话时遇到了一个问题。我的问题如下: 用户登录“localhost/login” 如果经过身份验证,它们将重定向到“customer.localhost/home” 目前,Cake正在为每个域(即localhost和customer.localhost)创建cookie。 这意味着我无法让会话为用户工作。是否有一种方法可以将所有cookie域固定到父域,以保持会话在子域之间工作 我已尝试在引导程序中输入此项,但无效: ini_集('session.c

我正在与Cakephp合作,我在跨子域维护会话时遇到了一个问题。我的问题如下:

  • 用户登录“localhost/login”
  • 如果经过身份验证,它们将重定向到“customer.localhost/home”
目前,Cake正在为每个域(即localhost和customer.localhost)创建cookie。 这意味着我无法让会话为用户工作。是否有一种方法可以将所有cookie域固定到父域,以保持会话在子域之间工作

我已尝试在引导程序中输入此项,但无效: ini_集('session.cookie_domain','.localhost')

如果你认为这不能做到,请随时告诉我,这样我就可以从这个令人沮丧的问题继续前进

非常感谢,

kSeudo会话(cakephp2.x):

要使会话cookie对您的所有子域和顶级域有效,您实际上需要在
APP/config/bootstrap.php
文件中自己设置它:

ini_set('session.cookie_domain', '.domain.com');
然后,在
APP/config/core.php文件中,将安全性设置为低:

Configure::write('Security.level', 'low');
“否则,referer\u检查将设置为中的当前HTTP\u主机 CakeSession对象行441。“

会话(CakePHP 3.x)

会话cookie路径默认为应用程序的基本路径。改变这个 您可以使用session.cookie\u路径ini值。例如,如果你想 您的会话将在所有子域中保持,您可以执行以下操作:



Cookies(CakePHP 2.x):

上面解释了您可以使用“域”变量:

允许访问cookie的域名。 e、 g.使用“.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;
}

app/config/core.php中有一个用于更改会话cookie域的配置:

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

您使用的是哪个版本的CakePHP?1.3还是2.x?谢谢你的帮助,我终于成功了。要记住的一点是,不要尝试对“localhost”执行此操作,请确保在主机中使用类似“example.com”的域。@tsukimi谢谢-已删除。我刚刚清空bootstrap.php中的变量“session.cookie\u domain”,以便它在localhost中为我工作。你的回答确实给了我解决问题的暗示@Dave我使用的是cakephp v1.3,我已经做了上面提到的所有更改,它对会话有效,但对cookie无效,我能为cookie做些什么?如果cake版本为3怎么办?这对我不起作用,但被接受的答案起了作用。这很有效,但指令名正确。答案已编辑。
Configure::write('Session', array(
    'defaults' => 'php',
    'ini' => array(
        'cookie_domain' => '.example.com'
    )
));