为什么这个 cookie 没有跨请求保留?
Why is this cookie not preserved across requests?
我想在用户登录 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,而不是其他任何 URI。 Here is an example of this behavior (initially the needed cookie was set with /referral
path and was invisible from the root URI, read both answer and comments). Following this 示例看起来你应该使用类似
的东西
$response->headers->setCookie(new Cookie("name_test", "test", $time, "/"));
但是这种方法的缺点是您的“秘密”cookie 名称和值在 nginx 配置中 hard-coded。由于您最初的问题标题是 如何阻止未通过身份验证的用户直接访问文件? 我可以建议您使用 X-Accel-Redirect
响应 header 的完全不同的解决方案。这个想法是你可以检查用户是否在后端登录,然后用正确的受保护文件路径响应。 Here is the official documentation and here 就是一个例子。请注意受保护的 location
块中的 internal
关键字。
我想在用户登录 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,而不是其他任何 URI。 Here is an example of this behavior (initially the needed cookie was set with /referral
path and was invisible from the root URI, read both answer and comments). Following this 示例看起来你应该使用类似
$response->headers->setCookie(new Cookie("name_test", "test", $time, "/"));
但是这种方法的缺点是您的“秘密”cookie 名称和值在 nginx 配置中 hard-coded。由于您最初的问题标题是 如何阻止未通过身份验证的用户直接访问文件? 我可以建议您使用 X-Accel-Redirect
响应 header 的完全不同的解决方案。这个想法是你可以检查用户是否在后端登录,然后用正确的受保护文件路径响应。 Here is the official documentation and here 就是一个例子。请注意受保护的 location
块中的 internal
关键字。