stefna/cookie
psr7/psr15 的 Cookie 管理
1.0.0
2023-10-25 11:55 UTC
Requires
- php: ^8.2
- psr/clock: ^1.0
- psr/http-message: ^1.0.1
- psr/http-server-middleware: ^1.0.1
- psr/log: ^3.0
- stefna/ds-collection: ^1.0
Requires (Dev)
- bnf/phpstan-psr-container: ^1.0
- nyholm/psr7: ^1.0
- phpstan/extension-installer: ^1.2
- phpstan/phpstan: ^1.8
- phpstan/phpstan-phpunit: ^1.1
- phpunit/phpunit: ^10.4
- squizlabs/php_codesniffer: dev-master
- stefna/codestyle: ^1.12
- sunkan/dictus: ^2.0
- tomasvotruba/type-coverage: ^0.0.7
README
此包帮助在 PSR-7/PSR-15 环境中处理 HTTP Cookie。
要求
PHP 8.2 或更高版本。
安装
composer require stefna/cookie
动机
当使用 PSR-7 时,当您希望请求-响应循环中的所有内容都位于请求和响应对象中时,setcookie()
函数变得无用了。
setcookie()
也不太可能支持 http Cookie 标准的最新功能。
概念
该包的主要概念是将 cookie 的读写与使用 cookie 分离,因此考虑到这一点,CookieJar
并未连接到 http 层,它只是一个存储 cookie 的容器。
然后由 CookieMiddleware
和 CookieManager
来读取和写入 http 头部。
通过这种方式分离,很容易实现对 cookie 的签名或加密,因为它们不是使用 cookie 的代码的一部分。
这也意味着在创建新的 cookie 时,您不需要 Response 对象。您只需将 cookie 添加到 CookieJar
中,中间件就会处理写入 cookie。
用法
从动作内部使用 cookie jar。
CookieJar
由 CookieMiddleware
添加到请求中,该中间件还负责将 cookie 添加到响应头中。
use Psr\Http\Message\ServerRequestInterface; class Action { public function __invoke(ServerRequestInterface $request) { $cookieJar = $request->getAttribute(\Stefna\Cookie\CookieJar::class); if (!$cookieJar->has('visits')) { $cookieJar->set(new \Stefna\Cookie\Cookie('visits', 0)); } $visitCookie = $cookieJar->get('visits'); if ($cookieJar->getInt('visits') < 10) { $cookieJar->set($visitCookie ->withValue($cookieJar->getInt('visits') + 1) ->withExpires(DateInterval::createFromDateString('+1 week')) ); } else { // remove cookie alt 1 $cookieJar->set($visitCookie->expire()); // remove cookie alt 2 $cookieJar->remove($visitCookie); } } }
贡献
我们始终欢迎收到错误/安全报告和错误/安全修复。
许可协议
MIT 许可协议 (MIT)。请参阅 许可文件 了解更多信息。