Длительность липкой сессии

Можно ли указать длительность липкой сессии в mod_cluster?

Я имею в виду, что застрявший сеанс очищается, когда в течение определенного периода времени нет активности.

У нас есть распространяемое приложение, которое сохраняет ссылку на зарегистрированного пользователя в веб-сеансе. Но во время входа в систему репликация веб-сеанса не выполняется достаточно быстро, поскольку запросы следуют за запросом входа в систему. Таким образом, если для этих запросов балансировщик выберет узел, который еще не был реплицирован, пользователь не будет в сеансе и произойдет ошибка.

Другое использование этой функции может быть при использовании кэшированной информации на сервере. Если вы не используете липкий сеанс, вы бы загружали для кэширования несколько раз одну и ту же информацию на разных серверах. Но если вы используете липкую сессию, вы будете привязаны к одному и тому же серверу на протяжении всей жизни сессии.

заранее спасибо

Leandro

2 ответа

Решение

Ответ

Невозможно включить или выключить привязку сеанса в mod_cluster в течение определенного промежутка времени. Один либо есть, либо выключен.

Дальнейшие комментарии

IIUC, вы на самом деле после истечения срока действия сессии или аннулирования сессии. Вы можете программно принять решение о недействительности вашего сеанса в любой момент, или вы можете позволить ему истечь, установив тайм-аут истечения.

Не могли бы вы подробнее рассказать о том, как использовать "тайм-аут прилипания сеанса"? Мы могли бы создать JIRA и реализовать новую функцию, если это имеет смысл...

Я нашел обходной путь для наших нужд.

Я настраиваю другой атрибут stickysession на балансировщике (BALANCER_SESSION_ID_HEADER_NAME) и управлять продолжительностью липкого сеанса балансировщика на стороне клиента.

Первый раз я установил counter + JSESSIONID в BALANCER_SESSION_ID_HEADER_NAME, Каждый раз STICKY_SESSION_TIMEOUT потрачено, я поставил ++counter + JSESSIONID в BALANCER_SESSION_ID_HEADER_NAME,

Код клиента:

if (USE_STICKY_SESSION_TIMEOUT && this.getjSessionId() != null) {
  if (this.getLastResponseTime() != 0
      && new Date().getTime() - this.getLastResponseTime() > STICKY_SESSION_TIMEOUT) {
    balancerSubsessionCounter++;
  }

  final String cookie = BALANCER_SESSION_ID_HEADER_NAME + "=" + balancerSubsessionCounter + "-"
      + this.getjSessionId();
  this.addCookie(httpPost, cookie);
}

//invoke service

if (USE_STICKY_SESSION_TIMEOUT) {
  this.setLastResponseTime(new Date().getTime());
}
Другие вопросы по тегам