mintyphp / session-handlers
更好的会话处理器
v1.0.3
2022-12-09 16:57 UTC
Suggests
- ext-memcached: Needed for session storage in Memcached in class MemcachedSessionHandler
- ext-redis: Needed for session storage in Redis in class RedisSessionHandler
README
此仓库包含一组支持锁定的PHP会话保存处理程序。我还包含了一个测试套件来证明它们确实如此。当前可测试的处理程序(及其对应的测试模式)包括:
- 标准
- 默认 (SessionHandler)
使用“files”会话模块(PHP内置)。 - memcachedn (NativeMemcachedSessionHandler)
使用“memcached”会话模块(ext-memcached)。 - redisn (NativeRedisSessionHandler)
使用“redis”会话模块(ext-redis)。
- 默认 (SessionHandler)
- 严格 (文档 / rfc)
- files (FilesSessionHandler)
使用".lock"文件而不是"flock"调用进行锁定。 - memcached (MemcachedSessionHandler)
使用Memcache的原子"add"操作进行锁定。 - redis (RedisSessionHandler)
使用Redis的原子"setNx"操作进行锁定。
- files (FilesSessionHandler)
请注意,标准模式可测试的处理程序也实现了严格模式,但不能作为严格处理程序进行测试。
要求
您可以使用以下命令安装此脚本的依赖项:
sudo apt install php-cli php-curl
可以使用以下命令安装可选依赖项:
sudo apt install memcached php-memcached redis php-redis
您需要PHP 7.4或更高版本来运行代码。
使用处理程序
此包位于Packagist,可以使用Composer安装,使用:
composer require mintyphp/session-handlers
您可以通过将以下两行代码添加到PHP代码中来使用Redis处理程序
ini_set('session.save_path', 'tcp://localhost:6379');
ini_set('session.use_strict_mode', true);
session_set_save_handler(new RedisSessionHandler(), true);
请注意,这些行必须在"session_start()"调用之前执行。
运行测试
您可以使用以下命令从命令行运行测试:
php run-tests.php
代码将为每个处理程序执行约1秒,并为每个处理程序测试104个HTTP调用。以下输出表示测试成功
standard - default : OK
standard - memcachedn : OK
standard - redisn : OK
strict - files : OK
strict - memcached : OK
strict - redis : OK
在失败的测试中会出现“FAILED”一词,如果Redis或Memcache的PHP模块没有加载,则会显示“SKIPPED”。
压力测试
使用此命令进行100次运行
for i in `seq 1 100`; do php run-tests.php silent; done
如所示,您可以使用“silent”参数来抑制成功或跳过的测试的输出。
到其他锁定处理程序的链接
以下是一些其他锁定会话处理程序的实现:
- https://github.com/mevdschee/symfony-session-tests(Symfony "files")
- https://github.com/stechstudio/laravel-raw-sessions(Laravel "files")
- https://github.com/1ma/RedisSessionHandler(Redis)
- https://github.com/colinmollenhour/php-redis-session-abstract(Redis)
- https://github.com/kronostechnologies/redis-session-handler (Redis)
享受吧!