Flask в IIS - странное поведение сеанса / реализация приложения - PullRequest
0 голосов
/ 18 февраля 2020

Я испытываю странную проблему с моим Flask приложением, когда оно размещено на сервере IIS (я знаю, что это не идеальная настройка, но я хотел изучить Python Flask разработку, и серверы IIS - это единственный вариант здесь на работе).

Проблема / странное поведение:

Когда размещенный сайт загружается в браузер в первый раз, попытка входа в систему вызывает страница просто «сбрасывается» - поля имени пользователя и пароля очищаются, а перепрошитых сообщений нет (он даже не превращается в код python для проверки формы). После этого приложение, кажется, работает нормально ... если вы войдете во второй раз, оно будет обработано соответствующим образом. Просто при первой загрузке страницы возникает проблема с состоянием приложения, и она воспроизводится путем «жесткого обновления» страницы (Ctrl + Shift + R в Chrome).

Простая перезагрузка (F5) страницы входа в систему перед попыткой первого входа, кажется, тоже помогает ... страница впоследствии будет работать нормально.

Эта проблема возникает только при доступе к сайту, размещенному на сервере, - это не происходит при локальном доступе к нему во время разработки.

Примечания и вещи, которые я заметил при устранении неполадок:

  • У меня установлен файл IIS web.config таким образом, что (я думаю) препятствует участию сервера в управлении сеансом или аутентификации:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <sessionState mode="Off" />
        <authentication mode="None" />
        <pages enableSessionState="false" enableViewStateMac="false" validateRequest="false" />
    </system.web>
</configuration>
  • В настоящее время размещенный сайт использует HTTP-связь, не HTTPS.

  • При случайно сгенерированных значениях SECRET_KEY (os.urandom(24)) генерируется новый SECRET_KEY после этой первой попытки входа в систему или после простого обновления страницы * 108 1 * (значение, которое отличается от того, что существует при первой загрузке страницы), поэтому эти действия по какой-то причине создают новые экземпляры приложения (?).

  • Если я измените конфигурацию приложения так, чтобы SECRET_KEY жестко кодировался в значение stati c вместо случайного генерирования, проблема больше не возникает.

  • Проблема сохраняется с использованием или без использования из flask -сессии (я пробовал с SESSION_TYPE='filesystem') и flask -login (я изначально думал, что это может как-то повлиять).

со случайно сгенерированным Значения SECRET_KEY, я пытался проверить данные cook ie в заголовках, чтобы выяснить, могу ли я обнаружить какое-то странное поведение, но я недостаточно знаком с ними, чтобы знать, что такое / не ожидается поведение. Я вижу следующий шаблон, который может быть подсказкой (в Chrome Инструменты разработчика> вкладка Сеть> выберите элемент, связанный со страницей входа> панель заголовков):

  • Страница загружен в первый раз:

    • Набор ответов-Cook-Cook ie: session=<string A>...
    • Запрос Cook-файла ie: session=<string B>
  • После первой попытки входа или мягкого обновления sh (F5):

    • Набор ответов-Cook-Cook ie: session=<string C>...
    • Request Cook ie: session=<string A>

На этом этапе попытка входа в систему будет работать как задумано, я предполагаю, потому что заголовок запроса теперь использует распознанное значение сеанса ( <string A>), но я не знаю, почему он не будет использовать его сразу после загрузки первой страницы.

Поскольку простая ссылка на страницу sh - это все, что, по-видимому, требуется для «разрешения» проблема, я думаю просто использовать немного JS, чтобы сделать это один раз, когда страница входа в систему загружается впервые, но меня это беспокоило настолько, что я решил проверить, или правильное решение.

Любая помощь приветствуется. -Erik

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...