У меня есть существующее веб-приложение, использующее Python Twisted. Клиенты - это встроенные устройства, а не люди. Поэтому я иногда сталкиваюсь с причудами часто устаревших и упрощенных http-клиентов на этих устройствах. Приложение использует сессионные куки, до сих пор у меня не было проблем.
Недавно я добавил устройство нового типа, и у меня возникли проблемы с неработающим сопоставлением сеансов.
Я использую getSession () из класса Session twisted.web.server.
Это конкретное клиентское устройство, похоже, возвращает заголовок Cookie в формате, который getSession не может сопоставить с сеансом (и, таким образом, создает новый сеанс при каждом полученном запросе).
Я не уверен, что это проблема с Twisted или проблема с тем, как клиентское устройство форматирует заголовок cookie, в частности, как оно переформатирует атрибут Path.
Поведение работающего клиентского устройства таково.
Заголовок Set-Cookie, отправляемый Twisted:
Set-Cookie: TWISTED_SESSION=10d4ed8a01ad1459c53018953343f2d357e9ac5015a86ab714fd09eb12b06c4c; Path=/
И полученный заголовок Cookie отправляется клиентом по следующему запросу:
Cookie: $Version="0"; TWISTED_SESSION=10d4ed8a01ad1459c53018953343f2d357e9ac5015a86ab714fd09eb12b06c4c;$Path=/
Теперь нерабочий клиент, заголовок Set-Cookie с веб-сервера Twisted:
Set-Cookie: TWISTED_SESSION=fe5abac62eb577176e94d2a98d46298d6c093d425e51583554a4ad98e3cff8fb; Path=/
И полученный заголовок Cookie, которому не соответствует Twisted Session:
Cookie: TWISTED_SESSION=fe5abac62eb577176e94d2a98d46298d6c093d425e51583554a4ad98e3cff8fb/
Просто поместите путь "/" в конец атрибута TWISTED_SESSION.
Я немного застрял в том, как диагностировать это дальше, я попытался переписать заголовок Cookie и удалить / с конца, но это не помогло.
Я также не уверен, должно ли поведение клиента быть правильным или нет. Это кажется необычным, но я не знаю, технически ли это неправильно.