首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >超薄3框架+Cookie

超薄3框架+Cookie
EN

Stack Overflow用户
提问于 2016-02-08 02:42:48
回答 6查看 9.8K关注 0票数 7

我使用cookies 2已经有一段时间了,但我想换到最新的版本3。当我阅读upgrade guide时,我对他们简单地说“Slim Framework已经从内核中删除了”,并提到包含不能与Slim一起工作的代码片段的FIG Cookies github repo感到有点沮丧。

有没有人可以分享一些使用Slim 3设置和获取虚拟cookie的工作代码片段?谢谢。

EN

回答 6

Stack Overflow用户

发布于 2016-04-06 19:35:41

如果您不想使用经过测试的PSR-7库FIG Cookies,您可以使用以下命令:

代码语言:javascript
复制
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;
    }

}
票数 8
EN

Stack Overflow用户

发布于 2017-02-06 18:04:50

我也遇到了同样的问题,但经过几次尝试,我终于明白了!首先,您需要使用:

代码语言:javascript
复制
$cookies = Dflydev\FigCookies\Cookies::fromRequest($request);

获取客户端发送的所有cookie。或者:

代码语言:javascript
复制
$cookie = FigRequestCookies::get($request, $cookiename);

才能得到一块饼干。但“奇怪”的部分是如何设置cookie,所以这里有一个小示例:

代码语言:javascript
复制
function setCookie($response, $name, $value){
    $response = FigResponseCookies::set($response, SetCookie::create($name)
                                                            ->withValue($value)
                                                            ->rememberForever()
                                            );
    return $response;
}

通过以下方式:

代码语言:javascript
复制
$response = FigResponseCookies::set($response, SetCookie::create($name)
                                                            ->withValue($value)
                                                            ->rememberForever()
                                            );

您将向请求中添加一个新的cookie,此方法将返回一个包含新cookie的新请求对象。因此,对于所有其他操作,您需要使用新请求,而不是旧请求。我希望这能有所帮助。如果你想发布你的代码,我们会试着调试它。

票数 5
EN

Stack Overflow用户

发布于 2019-06-09 22:34:52

Slim 3有Cookies类。设置cookie时不强制使用外部库:

代码语言:javascript
复制
$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:

代码语言:javascript
复制
$jwt = $request->getCookieParam('auth');
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35257522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档