我有一个使用Python Twisted的现有web应用程序。客户端是嵌入式设备而不是人。所以我偶尔会在这些设备中遇到一些过时的、过于简单的http客户端的怪癖。应用程序依赖于会话cookies,到目前为止我还没有遇到任何问题
最近,我添加了一种新类型的设备,我遇到了会话匹配不起作用的问题
我正在使用twisted.web.server会话类中的getSession()
这个特定的客户机设备似乎以getSession无法与会话匹配的格式返回Cookie头(因此在收到的每个请求上都会创建一个新会话)
我不确定这是Twisted的问题还是客户端设备格式化cookie头的问题,特别是它如何重新格式化Path属性
工作客户端设备的行为是这样的
Twisted发送的Set Cookie标头:
Set-Cookie: TWISTED_SESSION=10d4ed8a01ad1459c53018953343f2d357e9ac5015a86ab714fd09eb12b06c4c; Path=/
以及客户端在下一个请求中发送的结果Cookie头:
Cookie: $Version="0"; TWISTED_SESSION=10d4ed8a01ad1459c53018953343f2d357e9ac5015a86ab714fd09eb12b06c4c;$Path=/
现在是非工作客户机,Twisted web服务器的Set Cookie头:
Set-Cookie: TWISTED_SESSION=fe5abac62eb577176e94d2a98d46298d6c093d425e51583554a4ad98e3cff8fb; Path=/
以及Twisted会话不匹配的结果Cookie头:
Cookie: TWISTED_SESSION=fe5abac62eb577176e94d2a98d46298d6c093d425e51583554a4ad98e3cff8fb/
它只是将路径“/”放在TWISTED\u SESSION属性的末尾
我有点纠结于如何进一步诊断这个问题,我尝试重新编写Cookie头并从末尾删除/但这没有帮助
我也不确定客户的行为是否正确。这似乎不寻常,但我不知道它所做的是不是技术上的错误
我已经想出了解决办法。我想把它贴在这里,以防万一对其他人有用
简而言之,实际的答案是HTTP客户机坏了,发送Cookie头不正确
我很高兴有人能证明,但从我自己的阅读RFC6265&;Mozilla开发人员文档中没有允许将Path属性附加到另一个cookie(name=value)对的末尾。考虑到两人的名字是任意的,那就没有任何意义了
我添加了一个monkeypatch来解决这个问题。它很凌乱,但它允许我进一步测试这个设备有一些用处:
相关问题 更多 >
编程相关推荐