<a id="i-session-persistence"></a>

# Сохранение сессий

Часто необходимо, чтобы запросы от клиента всегда передавались одному и тому же контейнеру бэкенда.
Вы можете включить такое поведение с помощью функции сохранения сессий, доступной в ANIC.

ANIC поддерживает метод `sticky cookie`.
При использовании этого метода ANIC добавляет session cookie в первый ответ от бэкенда,
идентифицируя контейнер, который отправил ответ.
Когда клиент делает следующий запрос, он отправляет значение `cookie`,
и ANIC направляет запрос в тот же контейнер.

Поддерживается также расширенный метод сохранения сессий: `sticky route`.
См. директиву [sticky](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-sticky) в конфигурации Angie.

## Синтаксис

Чтобы включить сохранение сессий для одного или нескольких сервисов,
добавьте аннотацию `angie.software/sticky-cookie-service` в определение ресурса Ingress.

В аннотации указываются сервисы, для которых нужно включить сохранение сессий,
а также различные параметры `cookie`.

```yaml
angie.software/sticky-cookie-services: "service1[;service2;...]"
```

Каждый сервис следует правилу ниже:

```console
serviceName=serviceName cookieName [expires=time] [domain=domain] [httponly] [secure] [path=path]
```

Синтаксис параметров такой же, как в директиве [sticky](https://angie.software//angie/docs/configuration/modules/http/http_upstream.md#u-sticky) в конфигурации Angie.

## Пример

В следующем примере включается сохранение сессий для двух сервисов:
`tea-svc` и `coffee-svc`:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress-with-session-persistence
  annotations:
    angie.software/sticky-cookie-services: "serviceName=coffee-svc srv_id expires=1h path=/coffee;serviceName=tea-svc srv_id expires=2h path=/tea"
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /tea
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      - path: /coffee
        pathType: Prefix
        backend:
          service:
            name: coffee-svc
            port:
              number: 80
```

Для обоих сервисов sticky cookie имеет одинаковое имя `srv_id`.
Однако для каждого сервиса заданы разные значения времени жизни (`expires`) и пути (`path`).

Сохранение сессий продолжает работать даже в случае,
если запущено несколько реплик ANIC.
