Потеря сеанса Lucee в неустойчивое время

Я использую Lucee 5.1.3.18/Tomcat/centOS/mySql (3 физических, 6 виртуальных), и у меня неустойчивая потеря сеанса. Я просмотрел и убедился, что это не плохой код. Ситуация такова, что пользователь добавляет товары в корзину (все товары объединяются по session_id). Они заполняют информацию об оплате, кредитной карте и т. д. на странице оформления заказа. Как правило, если вы ждете от 3 до 5 минут и отправляете на проверку, выдает ошибку, не видя эти элементы (идентификатор сеанса изменился). Временные рамки варьируются, но обычно это около 5 минут.

Это происходит, когда у меня настроен администратор Lucee для использования моего источника данных и хранения информации о сеансе в БД.

приложение.cfc:

<cfset THIS.Name = "sessionName" />
<cfset THIS.SessionManagement = true />
<cfset THIS.ClientManagement = true />
<cfset THIS.ApplicationTimeout = CreateTimeSpan(0,12,0,0) />
<cfset THIS.SessionTimeout = CreateTimeSpan(0,4,0,0) />
<cfset THIS.SetClientCookies = true />
<cfset THIS.SetDomainCookies = false />
<cfset THIS.ScriptProtect = true />
 <cfset THIS.sessionType = "jee">
<cfset THIS.sessionStorage = "myDatasource">
<cfset THIS.sessionCluster = true>

изменение

<cfset THIS.sessionType = "jee">

к cfml, также имеет ту же проблему (пробовал EHcache без успеха).

Если я переключусь на использование «Память» и уберу БД, у меня все равно будет меньше проблем. Использование «Память» также приводит к увеличению кучи и, в конечном итоге, к блокировке серверов.

Журналы не показывают ничего полезного, но время от времени я вижу ошибки сломанного канала, а также потерю соединения с базой данных. Я отношу это к блокировке сервера.

Я не пытаюсь задать открытый вопрос, но есть ли у вас какие-либо советы по вероятным проблемам, с которыми вы столкнулись. Есть ли неясные специфические настройки Lucee, которые я мог упустить? Любая помощь приветствуется.

Спасибо, Генри.


person Henry    schedule 06.05.2017    source источник
comment
Обновление: Итак, я разобрался с крахом сервера. очевидно, это была DDoS-атака, исходящая от какой-то сомнительной компании из Далласа. Я сделал некоторые настройки брандмауэра, и мои серверы больше не зависают. Сейчас я наблюдаю, исчезнет ли потеря сеанса. Я подумал, что, возможно, серверы под нагрузкой просто высвобождали случайную память.   -  person Henry    schedule 09.05.2017
comment
К сожалению, потеря сеанса все еще происходит.   -  person Henry    schedule 11.05.2017
comment
Вероятно, это не поможет, но я подумал, что укажу, что ваш THIS.sessionType должен быть j2ee в соответствии с cfapplication docs, поэтому, возможно, он все еще использовал бы то, что по умолчанию установлено в lucee server/web admin   -  person Snipzwolf    schedule 14.05.2017
comment
Ваш предыдущий идентификатор сеанса все еще существует в БД после изменения идентификатора сеанса? я не знаком с тем, что хранится в базе данных, но, возможно, проверьте дату истечения срока действия сеанса, если она там тоже есть (думая, что ваше значение this.SessionTimeout переопределяется/игнорируется)   -  person Snipzwolf    schedule 14.05.2017
comment
Странно, что в документах написано j2ee, а в администраторе Lucee - jee... Я отказался от попыток получить это с помощью управления сеансом БД. Гораздо хуже, когда я пытаюсь идти по этому пути, и, честно говоря, я впервые пытался это реализовать.   -  person Henry    schedule 15.05.2017
comment
я могу порекомендовать использовать Redis в качестве серверной части хранилища сеансов, фактически использовал его под railo, но я думаю, что у lucee портировано то же расширение, что и сейчас, глядя на это, конечно, вам понадобится настроить отдельный экземпляр Redis, так что это один недостаток, я добавлю несколько бит кода для поиска в качестве ответа (слишком длинный для комментария) это может сделать ваши сеансы недействительными раньше, мы использовали их, чтобы использовать их для раннего истечения сеансов бота   -  person Snipzwolf    schedule 15.05.2017
comment
Я попытался добавить Redis в свой дистрибутив, он выдал ошибку с запросом файла .lex. Вы знаете, где я могу найти файл .lex?   -  person Henry    schedule 16.05.2017
comment
по-видимому, он должен быть в магазине, но его проверка дает мне ошибку из LDEV-895 поэтому не могу подтвердить это, чтобы получить файл lex с использованием источника из github, вам нужно установить ant, тогда вы должен просто иметь возможность запускать ant modern для создания файла lex (должен быть сгенерирован в ‹project_path›/dist/modern/)   -  person Snipzwolf    schedule 16.05.2017
comment
Здесь (отказ от ответственности: используйте на свой страх и риск и т. д., и т. д.) является копией, когда я пробовал, но она была из другого репо возможно, до того, как он получил официальное расширение   -  person Snipzwolf    schedule 16.05.2017
comment
У одного из моих клиентов есть серверная часть хранилища сеансов Redis — ошибка все еще возникает. Изучение ошибок, связанных с sessionInvalidate / structClear(session) - возможно, проблема с точным временем.   -  person Chili Con Code    schedule 28.05.2021


Ответы (1)


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

sessionInvalidate уничтожит сеанс (я не уверен, что это будет немедленно или после завершения вызвавшего его запроса), а вызов setMaxInactiveInterval переопределяет время ожидания сеанса, используемое в application.cfc.

<cfscript>          
    getPageContext().getSession().setMaxInactiveInterval(javaCast("int", 60));
    sessionInvalidate();
</cfscript>
person Snipzwolf    schedule 15.05.2017
comment
Это немедленно. - person Chili Con Code; 28.05.2021