michalsn/codeigniter-session-extended

管理存储在数据库中的 CodeIgniter 4 框架的用户会话

v1.0.0 2023-07-23 10:32 UTC

README

这个库使用户能够查看他们自己的活动会话,并从他们不再使用的设备中删除它们。

它仅与数据库会话处理程序一起工作。

PHPUnit PHPStan Deptrac

PHP CodeIgniter

需求

此库要求应用程序遵守 CodeIgniter 4 认证建议

安装

Composer

composer require michalsn/codeigniter-session-extended

手动安装

在下面的示例中,我们将假设,此项目的文件将位于 app/ThirdParty/session-extended 目录中。

下载此项目,然后通过编辑 app/Config/Autoload.php 文件来启用它,并将 Michalsn\CodeIgniterSessionExtended 命名空间添加到 $psr4 数组中,如下面的示例所示

<?php

namespace Config;

use CodeIgniter\Config\AutoloadConfig;

class Autoload extends AutoloadConfig
{
    // ...
    public $psr4 = [
        APP_NAMESPACE => APPPATH, // For custom app namespace
        'Config'      => APPPATH . 'Config',
        'Michalsn\CodeIgniterSessionExtended' => APPPATH . 'ThirdParty/session-extended/src',
    ];

    // ...

现在,按照 配置会话数据库处理程序 的说明进行操作 - 有一个区别。您必须使用 Michalsn\SessionExtended\DatabaseHandler 类而不是核心类。

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;
use Michalsn\SessionExtended\DatabaseHandler;

class Session extends BaseConfig
{
    // ...
    public string $driver = DatabaseHandler::class;

    // ...
    public string $savePath = 'ci_sessions';

    // ...
}

最后一步是运行一个命令,该命令将向会话表添加额外字段。要这样做,请运行以下命令

php spark se:install

就这样。你已经准备好开始使用了。

示例

// app/Controllers/Home.php
<?php

namespace App\Controllers;

use CodeIgniter\Exceptions\PageNotFoundException;
use Michalsn\CodeIgniterSessionExtended\SessionManager;

class Sessions extends BaseController
{
    public function index()
    {
        $sm = new SessionManager();

        $data['sessions'] = $sm->list(user_id());

        return view('sessions/index', $data);
    }

    public function delete()
    {
        if (! $this->request->is('post')) {
            throw new PageNotFoundException();
        }

        $rules = [
            'id' => ['required', 'string', 'max_length[128]'],
        ];

        if (! $this->validate($rules)) {
            return redirect()->back();
        }

        $sm = new SessionManager();

        if ($sm->delete($this->request->getPost('id'), user_id())) {
            return redirect()->back()->with('success', 'Session was successfully deleted.');
        }

        return redirect()->back()->with('error', 'Something went wrong.');
    }
}