python requests 模拟登录成功(非 session)后再次请求网站 cookies 被更换,但是用 Session 就可以正常使用,请问下这个过程 Session 做了什么?

2016-02-17 21:24:24 +08:00
 bello

在非 Session 的情况下直接用 post 登录网站,能够成功登录并得到 cookies,但是下一次请求时,就发现 cookies 已经被更换了,猜测是第一次登录时得到的 cookie 不正确。
但是通过 Session 就可以成功登录并继续在登录状态下访问,想请问下这个过程中 Session 做了什么?为什么单独用 cookies 就不能正常。

3431 次点击
所在节点    Python
1 条回复
bello
2016-02-18 00:00:09 +08:00
自己研究了一下,明白了
原因:
1. 中间有页面跳转,这些跳转页面的 cookies 没有获得。
2. response.cookies 每次返回的是该次服务器设置的 cookies,而非累积的(并不像请求中每次请求都将该 domain 下的所有 cookie 都带上),所以必须将每次服务器返回的 cookies 合并,才是该 domain 下的完整 cookies.
3. 由于之前获得的 cookie 不够完整,服务器检测 cookie 错误,所以重新发新的 cookie ,导致登录状态无法保持。

所以在这几个环节上, Session 主要完成了:
#合并新 reponse 的 cookies
self.cookies.update(new_response.cookies)

#从 response.history 中获得跳转页面设置的 cookies ,并合并到现有 cookies 中
if response.history:
for r in response.history:
self.cookies.update(r.cookies)

不知道理解得对不对,但是按照这个思路已经可以在不用 Session 的情况下保持登录状态了。
虽然还没有人回复,还是谢谢各位。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/257174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX