drbiko / dynamodb-sessions-dependency-free
一个用于在AWS的DynamoDB中存储会话的会话处理器实现,但不依赖于AWS SDK、Guzzle等
Requires
- php: >=5.5
- ext-curl: *
- ext-json: *
Requires (Dev)
- aws/aws-sdk-php: ^3.31
- mockery/mockery: ^1.2
- phpunit/phpunit: ^6.2
- vlucas/phpdotenv: ^2.4
This package is auto-updated.
Last update: 2024-08-29 04:49:05 UTC
README
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();