koded/session

具有自定义处理程序和 php.ini 支持的会话库

1.1.0 2019-12-10 22:19 UTC

This package is auto-updated.

Last update: 2024-09-05 03:44:10 UTC


README

Latest Stable Version Build Status Code Coverage Scrutinizer Code Quality Minimum PHP Version Software license

该库依赖于 php.ini 设置。可以使用 Koded\Session\SessionConfiguration 对象重置每个会话 ini 指令。

参考php.ini会话指令: https://php.ac.cn/manual/en/session.security.ini.php

使用方法

会话可以通过以下两种方法之一自动启动

应用配置

[
    'session' => [
        // your ini "session." overwrites, without "session." prefix
    ]
]

或使用 SessionMiddleware

将此中间件类包含在您的中间件堆栈中

// your middleware stack
$middleware = [
    SessionMiddleware::class
];

会话类和函数

session()->get('key');
session()->set('key', 'value');
// etc.

可以实例化并使用会话类,但建议使用 session() 函数而不是 Session 类的实例。

处理程序配置

最基本的操作是定义您想要用于会话的处理程序

// in your configuration file

return [
    'session' => [
        'save_handler' => 'redis | memcache'
    ]
]

如果您没有选择 Redis 或 Memcached,则默认为 files 处理程序,这是 PHP 的默认会话机制。

然而,如果您的应用程序在 Docker、Kubernetes、分布式环境等中运行,则可能不希望使用 files 处理程序。

在几乎所有情况下,Redis 都是 PHP 会话的最佳选择。

警告:Memcached 可能会丢失会话数据,因为这是它的性质。请谨慎使用!

Redis 处理程序

[
    'session' => [
        'save_handler' => 'redis'
        
        // OPTIONAL, these are the defaults
        'host' => 'localhost',
        'port' => 6379,
        'timeout' => 0.0,
        'retry' => 0,
        'db' => 0,
        
        'prefix' => 'sess:',
        'serializer' => 'php', // or "json"
        'binary' => false,     // TRUE for igbinary
    ]
]

典型的 Redis 设置

  • 1 服务器
  • 应用程序和 Redis 在同一台机器上
  • Redis (127.0.0.1:6379)
  • 无认证(Redis 不可从外部访问)
[
    'session' => [
        'save_handler' => 'redis',
        'name'         => 'session-name',
        'prefix'       => 'sess:',

        // isolate the session data in other db
        'db'           => 1
    ]
]

要支持大量数据,您需要良好的系统管理员技能和丰富的知识来设置 Redis 服务器。

Memcached 处理程序

[
    'session' => [
        'save_handler' => 'memcached',
        
        // OPTIONAL: defaults to ['127.0.0.1', 11211]
        // If you have multiple memcached servers
        'servers' => [
            ['127.0.0.1', 11211],
            ['127.0.0.1', 11212],
            ['127.0.0.2']
            ...
        ],
        
        // OPTIONAL: the options are not mandatory
        'options' => [
            ...
        ]
    ]
]

典型的 Memcached 设置

  • 1 服务器
  • 应用程序和 Memcached 在同一台机器上
  • Memcached (127.0.0.1:11211)
[
    'session' => [
        'save_handler' => 'memcached',
        'name'         => 'session-name',
        'prefix'       => 'sess.'
    ]
]

要支持大量用户,您需要在服务器上拥有足够的 RAM。但 Memcached 是这项技术的佼佼者,所以您应该没问题。

文件处理程序

这不是为任何严肃的商业用途推荐的处理程序。它只适用于小型项目。

所有会话指令都来自 php.ini

[
    'session' => [
        // OPTIONAL: defaults to "session_save_path()"
        // the path where to store the session data
        'save_path' => '/var/www/sessions',
        'serialize_handler' => 'php'
    ]
]

典型的原生 PHP 会话设置

[
    'session' => [
        // really nothing,
        // skip this section in your configuration
    ]
]

如果您已经扩展了应用程序,则不能使用此处理程序,因为会话数据很可能会在每次 HTTP 请求时随机处理在不同的实例上。