代码点火器会话库:如何自定义?

时间:2018-03-08 08:53:32

标签: php sqlite session codeigniter-3

我还是PHP和Code Igniter的新手,并开发了基于三重存储+一个小型SQLite数据库的项目。

我希望在会话过期时将一些会话数据保存在持久存储中,以便用户可以自定义页面并保留新会话的设置和历史记录。这似乎比为每个用户操作使用我的三重存储或数据库更实用。

我使用代码点火器3.1.5 +会话库+一个用于会话数据的小型SQLite数据库(遵循带有数据库驱动程序的会话库的CI文档:https://www.codeigniter.com/user_guide/libraries/sessions.html#database-driver以及此帖子的SQLite设置:How can I create a CRUD with Codeigniter using SQLite?) 。

我没有找到任何解决闭门会话的解决方案(可能是可能的?),因此发现我可以(a)修改CI Session系统库或(b)创建一个实现SessionHandlerInterface的自定义类(参见在这里:https://secure.php.net/manual/en/function.session-set-save-handler.php; 在这里:How do I save session data to a database instead of in the file system?)。这两种解决方案都包括在close()destroy()函数中添加自定义代码。

我想保留Code Igniter会话库,因为它使用起来非常简单并且已经为它编写了一些代码,但我不知道如何正确地扩展或修改它。

所以这就是我试过的,你能告诉我它是否合适?

1)在system / libraries / Session / drivers中创建一个文件Session_custom_driver.php,我在其中复制CI_Session_database_driver代码,并修改close()(或destroy())函数

2)编辑application / config / config.php:$config['sess_driver'] = 'custom';

下一步是从这个修改过的close()函数加载自定义库或模型:

$CI =& get_instance();
$this->CI_Instance =& $CI;  <--- add this in __construct()

public function close() {
    $this->CI_Instance->load->model("MyModelForSessions");
    ...
}

提前致谢。

编辑:使用此解决方案,我可以将会话数据保存在其他地方,并在会话过期时使用它,但每次修改$_SESSION中存储的数据时都会调用该函数。

如何只保存一次数据,即会话何时到期?

另一个想法:我可以使用用户的持久数据保存会话ID,然后在打开新会话时检索与此id对应的会话数据。

0 个答案:

没有答案