微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不跨请求保留此 cookie?

如何解决为什么不跨请求保留此 cookie?

我想在用户登录 Symfony 后添加一个带有值的 cookie,一个在当前会话的所有请求期间保存的 cookie,并检查该 cookie 是否存在于 Nginx 中,如果存在,将显示文件

cookie 已创建并发送,但它仅对一个请求有效,并且不会随所有新请求一起发送。我正在以这种方式添加新的 cookie:

$response = new Response();
$time = time() + (3600 * 24 * 7);
$response->headers->setCookie(new Cookie("nametest","test",$time,"/"));
$response->sendHeaders();

编辑:将路径添加为“/”会在所有请求中发送 cookie。现在最后一步是在Nginx中验证cookie。我正在使用以下 Nginx 配置:

location /assets/users/images/ {
    if ($cookie_nametest !~* "test") {
       return 301 https://example_domain.com/login;
    }
}

解决方法

可能的原因之一是您没有指定 cookie 路径。例如,如果此 cookie 设置在登录页面 https://example.com/login 上,它将从用户浏览器发送到服务器以获取以 /login 开头的 URI,而不是其他任何内容。 Here 是这种行为的一个示例(最初所需的 cookie 是使用 /referral 路径设置的,并且从根 URI 中是不可见的,请阅读答案和评论)。以下 this 示例看起来您应该使用类似

$response->headers->setCookie(new Cookie("name_test","test",$time,"/"));

然而,这种方法的缺点是您的“秘密”cookie 名称和值是硬编码在 nginx 配置中的。由于您最初的问题标题是如何阻止未经身份验证的用户直接访问文件?我可以使用 X-Accel-Redirect 响应标头向您建议一个完全不同的解决方案。这个想法是,您可以检查用户是否在后端登录,然后以正确的受保护文件路径进行响应。 Here 是官方文档,here 是示例。请注意受保护的 internal 块内的 location 关键字。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。