Назад | Перейти на главную страницу

Создать постоянный файл cookie в HAProxy

Я использую HAProxy для A / B-тестирования, и вот фрагмент моей конфигурации HAProxy.

listen  http 127.0.0.1:8080
    maxconn 18000

    use_backend a-version-backend if { req.cook(SITEID) -m beg a_version }
    use_backend b-version-backend if { req.cook(SITEID) -m beg b_version } 
    default_backend ab-test

backend ab-test
    balance roundrobin
    cookie SITEID insert indirect nocache maxlife 48h

    server server1 10.0.0.2:80 weight 25 cookie a_version
    server server2 10.0.0.3:80 weight 25 cookie a_version
    server server3 10.0.0.4:80 weight 50 cookie b_version

Прочитав документацию, я понял, что HAProxy может создавать только cookie сеанса. Можно ли создать постоянный файл cookie в HAProxy?

==== ОБНОВЛЕНИЕ ====

Извините за путаницу, я имел в виду постоянный файл cookie (обновил свой вопрос) https://en.wikipedia.org/wiki/HTTP_cookie#Persistent_cookie

Это файл cookie, установленный HAProxy. У него нет срока годности, и браузер будет рассматривать его как файл cookie сеанса https://en.wikipedia.org/wiki/HTTP_cookie#Session_cookie

Проблема с файлом cookie сеанса заключается в том, что когда пользователь закрывает свой браузер, он удаляет файл cookie. Это неприемлемо для A / B-теста, потому что они могут вернуться на сайт через несколько дней, а отслеживание аналитики будет рассматривать их как других людей.

А это пример постоянного файла cookie от Facebook. У него есть срок годности.

Мне удалось преобразовать файл cookie сеанса HAProxy в постоянный файл cookie с помощью Диспетчера тегов Google.

Поскольку GTM доступен в обоих приложениях, мне просто нужно создать код javascript для преобразования файла cookie в постоянный файл cookie.

Вот код, который я поместил в GTM:

<script type="text/javascript">
(function() {
  function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires + "; path=/";
  }

  function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') {
        c = c.substring(1);
      }
      if (c.indexOf(name) == 0) {
        return c.substring(name.length, c.length);
      }
    }
    return "";
  }

  if(getCookie('SITEID').length !== 0) {
    setCookie('SITEID', getCookie('SITEID'), 365);
  }
})();  
</script>

Код в основном проверяет, есть ли у вас SITEID или не. Если у вас есть файл cookie, срок его действия будет установлен на один год.