nginx - nginx add_header Set-Cookie 过期不起作用
问题描述
我正在尝试设置一个 nginx 服务器,当点击某个位置时,它会在 cookie 中设置某些参数。
我有以下配置,将参数放入 cookie 但过期不起作用。这是我的配置:
server {
listen 8800 default_server;
include /etc/nginx/default.d/*.conf;
server_name test.net;
location /initial {
add_header Set-Cookie lcid=1043;
add_header Set-Cookie expires=60;
}
}
根据我的理解,在设置此 cookie 60 秒后,cookie 应该会过期并被删除。但是,它仍然存在。
这个配置有什么问题吗?
任何帮助将不胜感激,谢谢!
解决方案
上述配置将导致设置两个 Set-Cookie 标头作为响应发送给客户端。
Set-Cookie: lcid=1043
Set-Cookie: expires=60
“Expires”是一个 cookie 属性,它应该出现在您设置 cookie 名称和值的标题中。这里还有一点需要注意的是,cookie 的 Expires 属性只需要一个固定的时间戳(例如:Expires=Wed,2015 年 10 月 21 日 07:28:00 GMT)而不是持续时间。如果您需要根据持续时间指定 cookie 的有效性,那么您需要设置 Max-Age 属性而不是 Expires。
因此,您需要将配置更改为只有一个 add_header 指令,如下所示
add_header Set-Cookie "lcid=1043; Max-Age=60";
这将确保客户端在响应中仅接收一个 Set-Cookie 标头,并在 cookie 的 Max-Age 属性中指定了适当的到期值。
推荐阅读
- oracle - 当查询返回值并且没有“EXCEPTION WHEN NO_DATA_FOUND THEN”时传递数据(Oracle 11g)
- c# - 使用 C# 将文件上传到 azure 文件存储使目录中的所有其余文件长度为 0
- c# - CultureInfo 对大名称(字符串)的“奇怪”响应
- mongodb - 任何云功能都可以有英国 IP 地址吗?
- python - 远程连接到 MongoDB 数据库而不以明文形式存储密码
- java - 在 sbt 应用程序中自定义 ForkJoinPool
- c# - 升级到 ASP.NET Core 2.2 后如何配置 Azure 日志记录
- python - 在列表的字典中切换键和值
- c# - C#等待页面加载(网络浏览器)
- php - 将模型实例传递给另一个模型的函数