如何在同一服务器上的不同codeigniter项目中访问同一会话?

时间:2019-01-02 06:35:22

标签: php codeigniter-3

如何在同一服务器的不同codeigniter项目中访问同一会话变量?请帮我 。当我在一个项目中设置会话变量时,不要从另一个项目中获取值。

2 个答案:

答案 0 :(得分:0)

尽管跨不同项目访问会话变量是一种安全违规行为,但是由于您的要求,您可以使用数据库访问会话变量。

在您的配置文件中

AnotherClass

将驱动程序设置为数据库。

然后创建您的会话表:

$config['sess_table_name']              = 'ci_sessions';
$config['sess_driver']              = 'database';
$config['sess_cookie_name']             = 'ci_session';

该代码表现在将由该表用于存储会话。您可以在整个项目中从此表访问数据(会话变量)。

请注意,codeigniter每5分钟重新生成一次会话ID并对其进行更新。因此,如果您要访问旧ID或父ID,则需要对其进行跟踪。另外,您可以生成并保留自己的ID供参考,以避免使用CI的会话ID。

希望这会有所帮助

答案 1 :(得分:0)

我认为在两个Web应用程序之间共享会话不是一个好主意。每个Web应用程序都在其自己的进程中运行,并且存在其边界是有原因的。

但是, 您可以使用以下方法做到这一点:

cookie存储(不理想,存储空间小,cookie中的敏感数据?)。 数据库会话(使用会话ID cookie持久化)。 覆盖并滚动自己的(使用本机php会话!)

由于您需要确保正确配置了会话标识符,因此这两个应用程序都需要。如果使用数据库实现,则需要确保两个应用程序都可以访问同一数据库。

只需确保两个项目的$ config ['encryption_key'] 相同即可。

将会话存储在数据库中,并在两个项目中使用相同的数据库。

Codeiniter 2 +:

$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';

Codeiniter 3 +:

$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';

Codeigniter 2 MySQL:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(45) DEFAULT '0' NOT NULL,
    user_agent varchar(120) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id),
    KEY `last_activity_idx` (`last_activity`)
);

Codeigniter 3 MySQL:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(128) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
    `data` blob NOT NULL,
    KEY `ci_sessions_timestamp` (`timestamp`)
);