. */ namespace SP\Core\Crypt; use SP\Bootstrap; use SP\Http\Request; /** * Class Cookie * * @package SP\Core\Crypt */ abstract class Cookie { /** * @var string */ private $cookieName; /** * @var Request */ protected $request; /** * Cookie constructor. * * @param string $cookieName * @param Request $request */ protected function __construct($cookieName, Request $request) { $this->cookieName = $cookieName; $this->request = $request; } /** * Firmar la cookie para autentificación * * @param string $data * @param string $cypher * * @return string */ protected final function sign($data, $cypher) { $data = base64_encode($data); return hash_hmac('sha256', $data, $cypher) . ';' . $data; } /** * Comprobar la firma de la cookie y devolver los datos * * @param string $data * @param string $cypher * * @return bool|string */ protected final function getCookieData($data, $cypher) { list($signature, $data) = explode(';', $data, 2); if (!empty($signature) && !empty($data)) { return hash_equals($signature, hash_hmac('sha256', $data, $cypher)) ? base64_decode($data) : false; } return false; } /** * Returns cookie raw data * * @return bool|string */ protected function getCookie() { return $this->request->getRequest()->cookies()->get($this->cookieName, false); } /** * Sets cookie data * * @param $data * * @return bool */ protected function setCookie($data) { return setcookie($this->cookieName, $data, 0, Bootstrap::$WEBROOT); } }