commandstring / reactphp-cookies
在React/Http中操作cookie的简单方法
v1.0.1
2023-01-20 21:44 UTC
README
使用Composer安装 composer require commandstring/reactphp-cookies
对于示例,$req 是一个实现 PSR-7 ServerRequestInterface 的对象,$res 是一个实现 PSR-7 ResponseInterface 的对象
创建控制器
$cookieController = new CookieController(null);
如果您想加密cookie,可以创建一个实现 CookieEncryptionInterface 的类,或者使用 Cookie Encryption
从控制器创建Cookie对象
您需要事先创建一个实现 PSR-7 Response Interface 的对象
$cookie = $cookieController->cookie($req, $res);
设置cookie
$cookie->set("token", "123456", 1, 15, 13, "/app", "app.domain.com");
这将创建一个名为 token
的cookie,其值为 123456
。此cookie将在当前时间后1小时、15分钟和13秒过期。该cookie仅在app路径和app.domain.com网站上有效。
获取cookie
$cookie->get("token");
如果设置了名为token的cookie,则返回其值。如果没有,则返回null。
删除cookie
$cookie->delete("token", "/app", "app.domain.com");
这将删除名为token的cookie,其路径设置为 /app
,域设置为 app.domain.com
示例用法
<?php use CommandString\Cookies\CookieController; use Psr\Http\Message\ServerRequestInterface; use React\Http\HttpServer; use React\Http\Message\Response; use React\Socket\SocketServer; require_once "vendor/autoload.php"; $cookies = new CookieController(); $http = new HttpServer(function (ServerRequestInterface $req) use ($cookies) { $res = new React\Http\Message\Response; $cookie = $cookies->cookie($req, $res); $parts = explode("/", $req->getRequestTarget()); $partsNum = count($parts) - 1; $invalidReq = function (string $message) use (&$res): Response { $res->withStatus(403); $res = $res->withHeader('content-type', 'text-plain'); $res->getBody()->write($message); }; if ($parts[1] === "set") { if ($partsNum !== 3) { return $invalidReq("Invalid URI, example `/set/id/123456`"); } $cookie->set($parts[2], $parts[3]); $res->getBody()->write("Set cookie {$parts[2]} to {$parts[3]}"); } if ($parts[1] === "get") { if ($partsNum !== 2) { return $invalidReq("Invalid URI, example `/get/id`"); } if ($cookie->exists($parts[2])) { $res->getBody()->write("Found cookie {$parts[2]}, it is set to {$cookie->get($parts[2])}"); } else { $res->getBody()->write("Cookie {$parts[2]} does not exist"); } } if ($parts[1] === "delete") { if ($partsNum !== 2) { return $invalidReq("Invalid URI, example `/delete/id`"); } if ($cookie->exists($parts[2])) { $cookie->delete($parts[2]); $res->getBody()->write("Deleted cookie {$parts[2]}"); } else { $res->getBody()->write("Cooke {$parts[2]} does not exist"); } } return $res; }); $socket = new SocketServer('127.0.0.1:8000'); $http->listen($socket);