Session CakePHP:单个域上的多个安装;登录会话共享问题

Session CakePHP:单个域上的多个安装;登录会话共享问题,session,cakephp,Session,Cakephp,我已将CakePHP安装到子目录中,它们似乎运行良好!它们都有不同的database.php配置文件并访问不同的数据库 例如: 公共_html/cakephp1/ public_html/cakephp2/ 我使用和分别访问它们,一切似乎都很好 当我登录其中一个组件(使用CakePHP标准的Auth/Session组件)时会出现问题,当我切换到另一个安装时,它也会认为我已登录 我如何防止这种情况?推荐的解决方案是什么?如果我在每次安装中更改salt值,会有帮助吗 编辑: 您好,Martin,我刚

我已将CakePHP安装到子目录中,它们似乎运行良好!它们都有不同的database.php配置文件并访问不同的数据库

例如:

  • 公共_html/cakephp1/
  • public_html/cakephp2/
  • 我使用和分别访问它们,一切似乎都很好

    当我登录其中一个组件(使用CakePHP标准的
    Auth
    /
    Session
    组件)时会出现问题,当我切换到另一个安装时,它也会认为我已登录

    我如何防止这种情况?推荐的解决方案是什么?如果我在每次安装中更改
    salt
    值,会有帮助吗

    编辑:

    您好,Martin,我刚刚尝试了将core.php更改为使用“蛋糕”会话处理并指定cookie路径的方法。因此,现在在每个应用程序中,我都有不同的core.php文件:

    cakephp1的core.php

    Configure::write('Session', array(
            'defaults' => 'cake',
            'ini' => array(
                'session.cookie_path' => '/cakephp1'
            )
        )); 
    
    Configure::write('Session', array(
            'defaults' => 'cake',
            'ini' => array(
                'session.cookie_path' => '/cakephp2'
            )
        )); 
    
    cakephp2的core.php

    Configure::write('Session', array(
            'defaults' => 'cake',
            'ini' => array(
                'session.cookie_path' => '/cakephp1'
            )
        )); 
    
    Configure::write('Session', array(
            'defaults' => 'cake',
            'ini' => array(
                'session.cookie_path' => '/cakephp2'
            )
        )); 
    
    但是仍然不起作用,两个安装似乎仍然共享同一个会话。我应该在哪里查看是否确实创建了cookie?我检查了/cakephp1和/cakephp2下的tmp/sessions文件夹,但该文件夹始终为空

    编辑:修改AppController:

    马丁,请帮我建议还有什么地方可以看。我遵循您的代码如下:

    下面是我的/demo/安装的代码(位于public_html/demo/) 你能告诉我在哪里可以找到应该用你的代码创建的cookie吗?

    如果它应该出现在public_html/demo/app/tmp/sessions上,那么即使在登录之后,我也看不到任何东西。在public_html/demo/下,除了标准的CakePHP文件夹外,没有其他内容

    这是从我的AppController获取的/demo/installation,可通过访问,而不是从

    core.php设置为默认值,即:

    Configure::write('Session', array(
        'defaults' => 'php'
    ));
    

    您需要将每个应用程序中的cookie限制在各自的子目录中。例如,在您的AppController.php中,您可以在
    beforeFilter()操作中执行此操作:

    <?php
    
    class AppController extends Controller {
    
        public $components = array(
            'Cookie',
        );
    
        public function beforeFilter() {
            parent::beforeFilter();
            $this->Cookie->path = '/cakephp1/';
        }
    
    }
    
    我也有类似的问题

    对于core.php/bootstrap.php中的第一个cakephp应用程序,请使用以下代码

    Configure::write('Security.cookie','cakephp1')

    在第二个cakephp应用程序中,使用core.php/bootstrap.php中的以下代码

    Configure::write('Security.cookie','cakephp2')


    终于解决了我的问题

    我的代码中有一条session_start()php命令,它重写了所有core.php配置,基本上恢复了php.ini会话管理设置


    虽然有一些答案是关于cookie的,但没有提到使用Cake自己的会话或PHP会话。所以,我认为分享一个实现这一目标的有文件记录的方法是很好的

    默认情况下,CakePHP(至少2.x)使用
    php.ini
    中的
    php
    会话设置

    可以在
    /app/Config/core.php
    中找到该设置,并在其中进行了详细说明:

    Configure::write('Session', array(
        'defaults' => 'php' // possible values: php, cake, database, cache
    ));
    
    对于具有own的应用程序,只需将上述值更改为
    cake
    ,即可告知应用程序使用
    app/tmp/sessions
    保存会话文件。必须提及的是,可能需要为每个安装使用不同的cookie名称:

    Configure::write('Session', array(
        'defaults' => 'cake'
        'cookie' => 'myApp1' // something like 'myApp2' for other app
    ));
    

    关于与会话相关的所有设置都有很好的文档。

    嗨,Martin,我已经尝试过你对AppController及其仍在共享会话的方法。我真的不知道该去哪里看:(谢谢你的回复Martin。是的,我在我的浏览器中清除了Cookie。我编辑了文章的结尾,向你展示了我的AppController和Core.php到底是什么样子。我应该在哪里找到Cookie?嗨,我尝试了代码,添加了“Cookie”添加到$components数组,这样它就不会出现任何错误。它不工作,仍然在不同的安装之间共享会话。我是否遗漏了什么?我需要在htaccess中执行什么特殊操作吗?检查更新的答案,我希望您的问题现在得到解决。