繁体   English   中英

在Codeigniter项目之间共享会话存储

[英]Share session storage between codeigniter projects

在Codeigniter上开发了两个不同的项目。 我想在这些项目之间共享会话存储。 $config['sess_cookie_name'] = 'ci_session'; 两者的配置文件相同。 但是,当我刷新其中一个时,所有数据都会自动从另一个项目中删除。 我不能解决这个问题。 #救命

将会话存储在中央数据库中; 对不同的项目使用相同的会话表。

请参阅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'; <-使用此表

在不同项目之间共享此表用于会话存储将解决此问题。

此处找到的解决方案: 跨域Cookie是创建单个登录门户,然后将用户从那里重定向到相关区域。 无法跨域共享Cookie(会话的基础),因此您需要找到替代解决方案。 集中登录和验证过程应该可以解决该问题。

有两种方法可以解决此问题。

  1. 首先是将会话实际存储在数据库中。 您将cookie名称保留在$_SESSION ,并将其提交给数据库以检索会话数据。 在机器之间移动时,可以在您选择的超全局变量中传输cookie名称: $_POST$_GET ,但很可能是$_GET 这种方法的问题在于,您需要从数据库中进行大量读写操作:

    • 读取一次即可检索每个请求的会话。 您将需要执行此操作,因为自用户上次刷新页面以来,您可能无法保证另一台计算机没有更新会话。
    • 在每个请求之后只写一次以存储会话。 这没有达到在单个计算机上拥有PHP会话高速缓存的许多目的,但是必须保持会话在计算机之间同步。
  2. 替代方法是使用相同的会话密钥,并像以前一样保留本地$_SESSION数据,但根据需要在过程上生成会话。 现在的区别是,每台计算机上的会话将不会真正同步,而是使用相同的逻辑生成。

当您的计算机创建和更新自己的本地会话时,大多数用户不会注意到单个本地会话的处理代价,但是,他们可能会注意到附加到其页面请求的例行数据库调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM