Есть ли хитрость в использовании переменных сеанса Classic ASP в среде AWS с балансировкой нагрузки?

У меня есть среда EC2 с балансировкой нагрузки AWS, на которой работает устаревший веб-сайт ASP. Приложение использует переменные сеанса для управления состоянием входа пользователя.

Проблема в том, что это не всегда работает, когда среда масштабируется до 2 или более экземпляров. Это хит и промах, и иногда переменные не существуют после того, как они объявлены. Я что-то упустил для этого типа среды?

Когда имеется только один экземпляр EC2. Нет проблемы. Больше, и переменная сеанса не всегда устанавливается.

Session("loggedin")=true

person user1964234    schedule 23.04.2019    source источник
comment
Возможный дубликат классического сеанса ASP и веб-сада (несколько рабочих)   -  person user692942    schedule 23.04.2019
comment
Классический ASP Session никогда не предназначался для работы в качестве веб-сада, но это не означает, что вы не можете реализовать что-то для сериализации/десериализации состояния сеанса из постоянного хранилища данных. Вы можете просто сохранить id в файле cookie браузера, который соответствует данным в вашем хранилище данных, и полностью удалить объект Session в памяти.   -  person user692942    schedule 23.04.2019


Ответы (1)


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

Правильный способ обработки сеанса, поскольку фиксированные сеансы не масштабируются должным образом, — использовать отдельную службу или хранилище данных для обработки данных сеанса пользователя. Например, вы можете сохранить сеанс пользователя в Elasticache или DynamoDB, и поэтому сеанс будет считываться за пределами ваших экземпляров EC2, и вы сможете продолжать добавлять (или удалять) новые экземпляры EC2 без проблем. Вы также можете использовать сервер базы данных для обработки информации о сеансе. Суть в том, чтобы не обрабатывать данные сеанса на фактическом экземпляре EC2.

Проверьте это: Использование DynamoDB с сеансом

person Jack Marchetti    schedule 23.04.2019