Cookies 通过清漆制作饼干

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") {

我正在运行一个使用varnish 3的Drupal 7站点

我们有两个站点:常规站点(example.com)和移动站点(m.example.com)

目前的流程是,当用户通过他的移动设备键入常规站点时,他将直接重定向到移动站点

我们想让用户也可以通过他的移动设备查看常规站点

长话短说: 我们如何通过清漆设置cookie(重要的是清漆将设置cookie,而不是应用程序)

我们尝试了以下代码:

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上进行设备检测,但我认为这超出了这个问题的范围