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

问题描述 投票:0回答:6

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

第一个应用程序是: 本地主机/aa/index.php

第二个应用程序是: 本地主机/aa/发票/index.php

第二个应用程序位于第一个应用程序文件夹中。在实际环境中,它们将位于同一域中。我正在尝试让单点登录工作 - 所以,如果我在 aa 应用程序中设置了用户数据,我也应该能够在发票文件夹中验证它。

有没有办法分享会议。

由于文件夹始终位于同一域中,因此我也愿意使用 ci 库(仅限 php)之外的会话。

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

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

请提出建议。

谢谢! :)

php codeigniter session
6个回答
7
投票

Codeigniter 由于某种原因推出了自己的会话实现,而不是本地 PHP 会话。

http://codeigniter.com/user_guide/libraries/sessions.html

您可以选择使用:

  1. cookie 存储(不理想,存储空间小,cookie 中包含敏感数据?)。
  2. 数据库会话(使用会话 ID cookie 保存)。
  3. 覆盖并推出您自己的(以使用本机 php 会话!)

显然,您需要确保会话标识符配置正确,以便两个应用程序可以读取相同的会话数据。如果使用数据库实现,您需要确保两个应用程序可以访问相同的数据库。

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


1
投票
$config['encryption_key'] = 'epitome';

两个应用程序文件夹的

encryption_key
配置名称相同。

在 codeigniter 中更改

encryption_key
的路径是
application/config/config.php
行号 228。


1
投票
$config['sess_cookie_name'] = 'myvalue';

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

CI_Session Object

( [用户数据] => 数组 ( [__ci_last_regenerate] => 1490351129 [等级] => 1 [用户] => 103 [全名] => 乔·多伊 )

[_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
    )


0
投票

如果可以的话.... 我注意到那些不切实际且违反正常惯例的设计问题将为长期而根深蒂固的问题提供基础......您应该问自己是否真的有必要/建议在两个不同版本之间共享会话数据当我们知道它们是两个不同版本的框架时,因为它们做事不同...... 我只能说,无论你做什么......这个设计缺陷都会使你的架构变得脆弱,迟早你将不得不抛弃它。

如果以后您发现其他情况,请告诉我..


0
投票

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


-2
投票

如果您将代码移至同一服务器,两个会话将默认开始共享。

© www.soinside.com 2019 - 2024. All rights reserved.