如何在同一服务器的不同codeigniter项目中访问同一会话变量?请帮我 。当我在一个项目中设置会话变量时,不要从另一个项目中获取值。
答案 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`)
);