我使用cookies 2已经有一段时间了,但我想换到最新的版本3。当我阅读upgrade guide时,我对他们简单地说“Slim Framework已经从内核中删除了”,并提到包含不能与Slim一起工作的代码片段的FIG Cookies github repo感到有点沮丧。
有没有人可以分享一些使用Slim 3设置和获取虚拟cookie的工作代码片段?谢谢。
发布于 2016-04-06 19:35:41
如果您不想使用经过测试的PSR-7库FIG Cookies,您可以使用以下命令:
namespace Your\App;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
class Cookie
{
/**
* @param Response $response
* @param string $key
* @param string $value
* @return Response
*/
public function deleteCookie(Response $response, $key)
{
$cookie = urlencode($key).'='.
urlencode('deleted').'; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; secure; httponly';
$response = $response->withAddedHeader('Set-Cookie', $cookie);
return $response;
}
/**
* @param Response $response
* @param string $cookieName
* @param string $cookieValue
* @return Response
*/
public function addCookie(Response $response, $cookieName, $cookieValue)
{
$expirationMinutes = 10;
$expiry = new \DateTimeImmutable('now + '.$expirationMinutes.'minutes');
$cookie = urlencode($cookieName).'='.
urlencode($cookieValue).'; expires='.$expiry->format(\DateTime::COOKIE).'; Max-Age=' .
$expirationMinutes * 60 . '; path=/; secure; httponly';
$response = $response->withAddedHeader('Set-Cookie', $cookie);
return $response;
}
/**
* @param Request $request
* @param string $cookieName
* @return string
*/
public function getCookieValue(Request $request, $cookieName)
{
$cookies = $request->getCookieParams();
return isset($cookies[$cookieName]) ? $cookies[$cookieName] : null;
}
}
发布于 2017-02-06 18:04:50
我也遇到了同样的问题,但经过几次尝试,我终于明白了!首先,您需要使用:
$cookies = Dflydev\FigCookies\Cookies::fromRequest($request);
获取客户端发送的所有cookie。或者:
$cookie = FigRequestCookies::get($request, $cookiename);
才能得到一块饼干。但“奇怪”的部分是如何设置cookie,所以这里有一个小示例:
function setCookie($response, $name, $value){
$response = FigResponseCookies::set($response, SetCookie::create($name)
->withValue($value)
->rememberForever()
);
return $response;
}
通过以下方式:
$response = FigResponseCookies::set($response, SetCookie::create($name)
->withValue($value)
->rememberForever()
);
您将向请求中添加一个新的cookie,此方法将返回一个包含新cookie的新请求对象。因此,对于所有其他操作,您需要使用新请求,而不是旧请求。我希望这能有所帮助。如果你想发布你的代码,我们会试着调试它。
发布于 2019-06-09 22:34:52
Slim 3有Cookies类。设置cookie时不强制使用外部库:
$setcookies = new Slim\Http\Cookies();
$setcookies->set('auth',['value' => $jwt, 'expires' => time() + $expire, 'path' => '/','domain' => 'example.com','httponly' => true,'hostonly' => false,'secure' => true,'samesite' => 'lax']);
$setcookies->set('tracking', "$value");
$response = $response->withHeader('Set-Cookie', $setcookies->toHeaders());
为了得到cookie:
$jwt = $request->getCookieParam('auth');
https://stackoverflow.com/questions/35257522
复制相似问题