drbiko/dynamodb-sessions-dependency-free

一个用于在AWS的DynamoDB中存储会话的会话处理器实现,但不依赖于AWS SDK、Guzzle等

v1.0.3 2022-10-31 17:11 UTC

This package is auto-updated.

Last update: 2024-08-29 04:49:05 UTC


README

Idealstack - the best way to run PHP on AWS

dynamodb-sessions-dependency-free

一个用于在dynamoDB中存储会话的会话处理器实现,但不依赖于AWS SDK、Guzzle等。此外,它还更快!

理想堆栈(Idealstack)AWS托管平台使用此工具来提供对DynamoDB会话的透明支持,因此用户无需更改其代码。

请参阅我们关于如何使用它、设置所需表等的博客文章

功能

  • 基本上是AWS SDK官方会话处理器的替代品
  • 无依赖性 - 不依赖于任何其他composer包。只需在PHP中启用核心curl和json扩展即可
  • 不需要自动加载器(尽管也可以与自动加载器一起工作,例如composer),但不需要自动加载器
  • 支持大多数常见的AWS身份验证方法(例如实例配置文件、ECS任务角色、.aws配置文件、环境变量)
  • 与所有主要PHP版本兼容(甚至包括PHP 5.6,对于所有那些怀旧者来说)
  • 不支持锁定(这仅仅是因为我们不需要它,欢迎提交PR或提出问题如果您需要它)

你为什么想使用这个?

可能你不需要。AWS SDK包括一个由AWS维护的会话处理器,对于大多数人来说可能是一个更好的选择。

你为什么想在dynamoDB中存储会话?如果你在一个集群环境中运行PHP,默认的基于文件的会话处理器将不起作用。

你可以将会话存储在SQL数据库中或Redis中,但在许多方面,在AWS上使用dynamoDB是更好的选择。它可以自动扩展到任意数量的读写,可以全球分布,具有弹性定价模型,对于小型网站等来说更便宜等。

以下是一些你可能想使用此代码而不是AWS SDK的原因

  • 如果你没有使用AWS SDK做其他事情,会话处理器将在每次页面加载时包括大量的PHP类,而这些类并不是必需的。这可能会减慢速度,使用更多的RAM、IO和Opcache等。
  • 它更快。大约快30%。我们谈论的是30ms和20ms之间的差异,所以会话不太可能是导致你的应用程序缓慢的瓶颈。尽管如此,更快总是好的。
  • 如果你选择使用php的auto_prepend_file自动包含此代码,如果你使用AWS SDK版本,可能会出现一些奇怪的效果。它需要一个自动加载器,这可能会干扰你的项目自己的自动加载。此外,它还会“污染”命名空间。如果你的代码使用了与会话使用的SDK版本不同的SDK版本,你应该预期会遇到问题。这就是我们为Idealstack开发此工具的原因,我们使dynamoDB会话对用户的代码透明。

安装

通过composer

composer require idealstack/dynamodb-sessions-dependency-free

或克隆此存储库

如何使用它

配置与AWS SDK版本相同,请阅读他们的文档

https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html

您应按照AWS SDK文档推荐的方式配置DynamoDB表。然而,我们建议您还使用DynamoDB的'ttl'功能来回收会话。在'expires'字段上设置它(这也适用于原生SDK)。请参阅我们博客文章中的说明,了解如何设置表格:如何设置表格

use Idealstack\DynamoDbSessionHandlerDependencyFree;
// or if you don't want to use composer auto-loader, try: 
// require(__DIR__ .'/vendor/idealstack/dynamodb-session-handler-dependency-free/src/DynamoDbSessionHandler.php');

(new Idealstack\DynamoDbSessionsDependencyFree\DynamoDbSessionHandler(
[
            'table_name' => 'your-session-table-name',
            'region'     => 'local',
            'endpoint'   => 'https://:8000',
// Credentials.  In production we recomend you use an instance role so you do not need to hardcode these.
// At least make sure you don't hardcode them and commit them to github!
            'credentials' => [
                'key' => 'AAAAAAAAAAAAAAAAAAAAAA',
                'secret' => 'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB'
            ],
// These are all defaults. 
//             // Base64 encode data when reading and writing. Avoids problems with binary data,  Note this is 
//             // not the behaviour of the AWS SDK, so set to false if you require compatibility with existing
//             // sessions  created with the SDK
//            'base64' => true, 
//            'hash_key' => 'id',
//
//            // The lifetime of an inactive session before it should be garbage collected. If it isn't provided, 
//            // the actual lifetime value that will be used is ini_get('session.gc_maxlifetime').
//            'session_lifetime' => 86400, // 24 hours
//            'consistent_reads' => true, //You almost certainly want this to be true
//            'session_locking' => false, //True is not supported
        ]

))->register();