在codeigniter上开发了两个不同的项目。我想在这些项目之间共享会话存储。 $config['sess_cookie_name'] = 'ci_session';
配置文件在两者中都相同。但是当我刷新其中一个时,所有数据都会自动从另一个项目中删除。我无法解决这个问题。 #帮助
答案 0 :(得分:1)
将会话存储在中央数据库中;对不同的项目使用相同的会话表。
请参见https://codeigniter.com/user_guide/libraries/sessions.html#database-driver
附录:
Codeigniter(CI)使用多种方式来存储会话。平面文件,数据库,Redis等。默认为平面文件。即将会话数据存储在文件系统中。
还可以将会话存储在数据库表中。此方法可简化多服务器和多项目的安装。
application / config / config.php确实有一个名为“会话变量”的部分。
$ config ['sess_driver'] ='数据库'; <-使用数据库
$ config ['sess_save_path'] ='ci_sessions'; <-使用此表
在不同项目之间共享此表用于会话存储将解决此问题。
答案 1 :(得分:0)
此处找到的解决方案:Cross-Domain Cookies是创建单个登录门户,然后将用户从那里重定向到相关区域。不可能跨域共享cookie(会话的基础),因此您需要找到替代解决方案。集中登录和验证过程应解决此问题。
答案 2 :(得分:0)
有两种解决方法。
首先是将会话实际存储在数据库中。您将cookie名称保留在$_SESSION
中,并将其提交给数据库以检索会话数据。在机器之间移动时,可以在您选择的超全局变量中传输cookie名称:$_POST
或$_GET
,但最有可能是$_GET
。这种方法的问题在于,您需要从数据库中进行大量读取和写入:
另一种方法是使用相同的会话密钥,并像以前一样保留本地$_SESSION
数据,但根据需要在过程上生成会话。现在的区别是,每台计算机上的会话将不会真正同步,而是使用相同的逻辑生成。
在您的计算机创建和更新自己的本地会话时,大多数用户不会注意到单个本地会话的处理惩罚,但是,他们可能会注意到附加到其页面请求的例行数据库调用。