为什么Symfony设置的Cookie无法跨请求保留及如何在Nginx中校验
需求
在Symfony框架中实现用户登录后下发指定值的Cookie,要求该Cookie在站点所有请求中都生效,同时在Nginx层校验该Cookie存在且值正确,校验通过才允许访问对应静态资源。
初始问题
初期已完成Cookie创建下发逻辑,但Cookie仅在单次请求中有效,后续新请求不会携带该Cookie。
最初的Cookie设置代码如下:
$response = new Response(); $time = time() + (3600 * 24 * 7); $response->headers->setCookie(new Cookie("nametest", "test", $time, "/")); $response->sendHeaders();
问题修复
将Cookie的path参数设置为/后,Cookie即可在站点全路径的所有请求中正常携带。
Nginx校验配置
最终Nginx侧的校验规则如下,针对/assets/users/images/路径下的资源,校验nametestCookie值是否匹配,不匹配则跳转登录页:
location /assets/users/images/ { if ($cookie_nametest !~* "test") { return 301 https://example_domain.com/login; } }
内容的提问来源于stack exchange,提问作者Kevin Gravell
相关产品推荐
相关产品推荐

