我正在尝试检测我的应用程序是否设置了一个 cookie,该 cookie 为下一页上的用户保存了一条“警报消息”,如果检测到,Javascript 会在其中显示它。
在我的 vcl_fetch() 中,我需要检测特定的 cookie 值“alert_message”是否出现在 Set-Cookie 标头中的任何位置(大概在 VCL 变量beresp.http.Set-Cookie中)。如果检测到,那么我不想缓存该下一页(因为 Varnish 默认会去除 Set-Cookie 标头,这会在警报消息返回浏览器之前将其删除)。
所以这是我的简单测试:
if(beresp.http.Set-Cookie ~ "alert_message") {
set req.http.no_cache = 1;
}
奇怪的是,它无法评估为真。
因此,我将变量放入 Server 标头中以查看它的外观:
set beresp.http.Server = " MyApp Varnish implementation - test reading set-cookie: "+beresp.http.Set-Cookie;
但由于某种原因,这仅在响应标头中显示 FIRST Set-Cookie 行。
以下是相关的响应标头:
Server: MyApp Varnish implementation - test reading cookie: elstats_session=7d7279kjmsnkel31lre3s0vu24; expires=Wed, 10-Oct-2012 00:03:32 GMT; path=/; HttpOnly
Set-Cookie:app_session=7d7279kjmsnkel31lre3s0vu24; expires=Wed, 10-Oct-2012 00:03:32 GMT; path=/; HttpOnly
Set-Cookie:alert_message=Too+many+results.; expires=Tue, 09-Oct-2012 20:13:32 GMT; path=/; domain=.my.app.com
Set-Cookie:alert_key=flash_error; expires=Tue, 09-Oct-2012 20:13:32 GMT; path=/; domain=.my.app.com
Vary:Accept-Encoding
如何在所有 Set-Cookie 标题行上读取和运行字符串检测?