编程杂谈

通过爬虫来理解Cookie和Session

2019-04-28  本文已影响0人  eye_water_

前言

Cookie和Session的概念我也接触过很多次,但一直没有机会实践一下,正巧最近想用爬虫模拟登录教务系统,就想到了利用Http的请求头来进行登录操作

登录的流程

无标题绘图.png

这样做有什么好处?

最大的好处就是用户只需要输入一次账号密码,之后再访问网页时,只需要再Headers信息利用Cookie包含Session_id,后台就可以根据Session_id来判断用户是否登录

Session_id也有可能存在内存上

Set_cookie

一般打开教务系统时,因为我们前面多次登录过,因此Cookie信息会一直保存在浏览器中,我们要做的就是先清除Cookie

cookie.PNG

清除完Cookie刷新界面,可以看到返回的头部信息

cookie1.PNG

Cookie

之后我们先输入账号密码登录
成功登录之后页面会进行跳转,对于我使用的教务系统
跳转到了
http://172.18.254.101/xs_main.aspx?xh=学号
然后看一下对于这个页面的请求头部信息

cookie3.PNG

利用爬虫进行模拟登录

注意
在进行模拟登录时一定要在网页上保持教务系统的登录(不要退出!!!)

观察整个请求头发现,只需要在利用爬虫进行请求页面时把Headers与上述图片的Headers设置完全一样就可以获得页面信息

import requests

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'Cookie': 'ASP.NET_SessionId=t2iov2450tkelm55eiqm3ki3; BIGipServerpool-jw=2046694060.0.0000',
    'Host': '172.18.254.101',
    'Referer': 'http://172.18.254.101/',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
    
}

r = requests.get('http://172.18.254.101/xs_main.aspx?xh=201616070204', headers=headers)
print(r.text)

因为请求头中包含了Session_id等信息,因此后台服务器会对Session_id进行认证,认证通过,就意味着登录成功

cookie4.PNG

退出网页

当我们在教务系统退出时,发现上述代码已经不能用了


cookie5.PNG

猜测在后台服务器中Session_id存储在内存上,要不然对于频繁的登录登出操作如果通过数据库进行增删查,那么会对速度造成很大的影响

上一篇下一篇

猜你喜欢

热点阅读