Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个CodeIgniter应用程序之间的会话共享_Php_Codeigniter_Session - Fatal编程技术网

Php 两个CodeIgniter应用程序之间的会话共享

Php 两个CodeIgniter应用程序之间的会话共享,php,codeigniter,session,Php,Codeigniter,Session,我在同一台服务器上安装了2个codeigniter 第一个应用程序是: localhost/aa/index.php 第二个应用程序是: localhost/aa/invoice/index.php 第二个应用程序位于第一个应用程序文件夹中。在实时环境中,它们将位于同一个域上。我正在尝试让单点登录工作——因此,如果我在aa应用程序中设置了userdata,那么我也应该能够在invoice文件夹中验证它 是否有一种方法可以共享会话 由于文件夹总是在同一个域上,我也愿意使用ci库(仅php)之外的会

我在同一台服务器上安装了2个codeigniter

第一个应用程序是: localhost/aa/index.php

第二个应用程序是: localhost/aa/invoice/index.php

第二个应用程序位于第一个应用程序文件夹中。在实时环境中,它们将位于同一个域上。我正在尝试让单点登录工作——因此,如果我在aa应用程序中设置了userdata,那么我也应该能够在invoice文件夹中验证它

是否有一种方法可以共享会话

由于文件夹总是在同一个域上,我也愿意使用ci库(仅php)之外的会话

编辑: 当它们没有任何数据时,会显示相同的会话id。当我在一个应用程序上添加一些变量时,另一个就不同步了

我还将会话存储在数据库中(两个应用程序共享同一个数据库)

请建议


谢谢!:)

如果将代码移动到同一台服务器,默认情况下,两个会话都将开始共享。

Codeigniter出于某种原因会滚动其自己的会话实现,而不是本机PHP会话

您可以选择使用:

  • cookie存储(不理想,存储容量小,cookie中的敏感数据?)
  • 数据库会话(使用会话id cookie持久化)
  • 覆盖并滚动您自己的(使用本机php会话!)
  • 显然,您需要确保会话标识符配置正确,以便两个应用程序都可以读取相同的会话数据。如果使用数据库实现,则需要确保两个应用程序都可以访问相同的数据库

    为了增加复杂性,如果您选择加密会话,加密类使用的salt在两个应用程序中也需要相同,以便任何一个都能够解密共享会话数据。

    如果可以的话。。。。 我已经注意到,那些不实用和违背常规的设计问题将成为长期和根深蒂固的问题的基础。。。。你应该问问你自己,当我们知道一个框架的两个不同版本是两个不同的版本,因为它们做事情的方式不同时,在两个不同版本之间共享会话数据是非常必要/可取的。。。 我只能说无论你做什么。。这个设计缺陷将使您的架构变得脆弱,迟早您将不得不放弃它


    如果您稍后发现其他问题,请告诉我。

    如果您使用相同的加密密钥在同一服务器上安装代码,默认情况下,两个安装将共享会话。实际上,我是在为另一个客户机复制codeigniter安装时发现的,但安装在同一台服务器上。我担心这是一只虫子

    $config['encryption_key'] = 'epitome';
    
    两个应用程序文件夹的
    加密\u密钥
    配置名称将相同

    在codeigniter中更改
    加密\u密钥的路径是
    application/config/config.php
    行号228

    $config['sess_cookie_name'] = 'myvalue';
    
    在config.php文件中,您可以使用“文件”会话驱动程序在两个CI应用程序上设置相同的值

    CI_Session Object
    
    ( [userdata]=>数组 ( [\u ci\u last\u regenerate]=>1490351129 [级别]=>1 [用户]=>103 [全名]=>鲁本火山口 )


    )

    我不知道CodeIgniter,但请查看是否有指定cookie路径的设置,如果有,请将cookie路径设置为
    /aa/
    (第一个应用程序的文件夹,没有
    localhost
    部分)。另外,查看是否有会话目录,并将其设置为(在第二个应用中)第一个应用会话目录。您需要考虑的一件事是,如果一个应用程序清除了会话,而另一个应用程序不应该清除会话。我个人会选择选项#3,并滚动您自己的db表来管理它。将数据库用于会话数据(取决于单个应用程序用例)是一个性能杀手。我个人在高流量、多服务器设置中使用了本机php会话,没有任何问题。为什么要重新发明轮子?诚然,这超出了原始问题的范围。我不再使用Codeigniter.PHP会话的原因之一是在两个应用程序上都得到了传播,这将朝着这个方向发展。谢谢!:):)我比较乐观一点。它本身会有一系列问题,但基本上我们只是将自定义应用程序与现有CI项目集成,这不是理想的情况,而是让它工作。
    [_driver:protected] => files
    [_config:protected] => Array
        (
            [cookie_lifetime] => 600
            [cookie_name] => MyHiddenValue
            [cookie_path] => /
            [cookie_domain] => 
            [cookie_secure] => 
            [expiration] => 600
            [match_ip] => 
            [save_path] => /tmp
        )