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

时间:2017-10-04 07:43:23

标签: php codeigniter session

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

3 个答案:

答案 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)

有两种解决方法。

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

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

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