Cookies 通过清漆制作饼干
我正在运行一个使用varnish 3的Drupal 7站点 我们有两个站点:常规站点(example.com)和移动站点(m.example.com) 目前的流程是,当用户通过他的移动设备键入常规站点时,他将直接重定向到移动站点 我们想让用户也可以通过他的移动设备查看常规站点 长话短说: 我们如何通过清漆设置cookie(重要的是清漆将设置cookie,而不是应用程序) 我们尝试了以下代码:Cookies 通过清漆制作饼干,cookies,drupal-7,varnish,httpcookie,varnish-vcl,Cookies,Drupal 7,Varnish,Httpcookie,Varnish Vcl,我正在运行一个使用varnish 3的Drupal 7站点 我们有两个站点:常规站点(example.com)和移动站点(m.example.com) 目前的流程是,当用户通过他的移动设备键入常规站点时,他将直接重定向到移动站点 我们想让用户也可以通过他的移动设备查看常规站点 长话短说: 我们如何通过清漆设置cookie(重要的是清漆将设置cookie,而不是应用程序) 我们尝试了以下代码: sub_vcl{ if (req.http.host ~ "^example\.com") {
sub_vcl{
if (req.http.host ~ "^example\.com") {
if (req.url ~ "^/(admissions|arts|aspaka|bog|cc|chemistry|GermanHistory|humanities|institutes|lifesci|peace|public-affairs)($|/)|~") {
set req.backend = mondrian;
set req.http.host = "exmpale.com";
}
else {
if (req.http.cookie !~ "nomobi=true") {
if (req.url ~ "nomobi=true") {
set req.http.cookie = "nomobi=true";
}
else {
call devicedetect;
if (req.http.X-UA-Device ~ "^mobile" && req.url !~ "^/registration") {
set req.http.location = "http://m.example.com" + req.url;
error 750 ;
}
}
}
}
}
}
但它不起作用。
谢谢 您正在设置请求cookie而不是响应cookie,因此cookie将被传递到后端而不是客户端
警告: 执行
set req.http.cookie=“xxx”
时要小心,因为您将覆盖请求cookie,并且可能会中断Drupal的会话/身份验证部分
长话短说,您需要在
vcl\u fetch
或vcl\u deliver
中添加一个Set Cookie头(beresp.http.Set Cookie
),类似于:
...
if (req.http.cookie !~ "nomobi=true") {
if (beresp.http.Set-Cookie) {
set beresp.http.Set-Cookie = beresp.http.Set-Cookie + "nomobi=true; path=/; domain=your.cookie.domian.tld";
} else {
set beresp.http.Set-Cookie = "nomobi=true; path=/; domain=your.cookie.domian.tld";
}
}
...
您必须验证Set-Cookie标头是否对您的域有效。在此代码中,触发“Set-Cookie”的条件是什么?(例如,我们希望在请求url时设置它:)您正在粘贴的代码上添加它。您甚至可以在Varnish上进行设备检测,但我认为这超出了这个问题的范围