无状态的http
协议python
如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只须要发送页面请求,服务器返回内容。对于服务器来讲,并不关心,也并不知道是哪一个用户的请求。对于通常浏览性的网页来讲,没有任何问题。ajax
为了实现这种用户标记,服务器就采用了cookie这种机制来识别具体是哪个用户的访问。数据库
如图,为了实现用户标记,在Http无状态请求的基础之上,咱们须要在请求中携带一些用户信息(好比用户名之类,这些信息是服务器发送到本地浏览器的,可是服务器并不存储这些信息),这就是cookie机制。浏览器
须要注意的是:cookie信息是保存在本地浏览器里面的,服务器上并不存储相关的信息。 在发送请求时,cookie的这些内容是放在 Http协议中的header 字段中进行传输的。安全
几乎如今全部的网站都会发送一些 cookie信息过来,当用户请求中携带了cookie信息,服务器就能够知道是哪一个用户的访问了,从而不须要再使用帐户和密码登陆。服务器
可是,刚才也提到了,cookie信息是直接放在Http协议的header中进行传输的,看得出来,这是个隐患!一旦别人获取到你的cookie信息(截获请求,或者使用你的电脑),那么他很容易从cookie中分析出你的用户名和密码。为了解决这个隐患,因此有了session机制。cookie
了解sessionsession
- 刚才提到了cookie不安全,因此有了session机制。简单来讲(每一个框架都不同,这只是举一个通用的实现策略),整过过程是这样:框架
总结 - cookie 在客户端(本地浏览器),session 在服务器端。cookie是一种浏览器本地存储机制。存储在本地浏览器中,和服务器没有关系。每次请求,用户会带上本地cookie的信息。这些cookie信息也是服务器以前发送给浏览器的,或者是用户以前填写的一些信息。 - Cookie有不安全机制。 你不能把全部的用户信息都存在本地,一旦被别人窃取,就知道你的用户名和密码,就会很危险。因此引入了session机制。 - 服务器在发送id时引入了一种session的机制,很简单,就是根据用户名和密码,生成了一段随机的字符串,这段字符串是有过时时间的。 - 必定要注意:session是服务器生成的,存储在服务器的数据库或者文件中,而后把sessionID发送给用户,用户存储在本地cookie中。每次请求时,把这个session ID带给服务器,服务器根据session ID到数据库中去查询,找到是哪一个用户,就能够对用户进行标记了。 - session 的运行依赖 session ID,而 session ID 是存在 cookie 中的,也就是说,若是浏览器禁用了 cookie ,那么同时 session 也会失效(可是能够经过其它方式实现,好比在url中传递 session ID) - 用户验证这种场合通常会用 session。 所以,维持一个会话的核心就是客户端的惟一标识,即session ID
import requests post_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20191051845626' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36', } session = requests.session() #建立一个session对象,该对象会自动将请求中的cookie进行存储和携带 formdata = { 'email': '15072296340', 'password':'' } session.post(url=post_url,data=formdata,headers=headers) #使用session发送请求,目的是为了将session保存该次请求中的cookies get_url = 'http://www.renren.com/256450404/profile?ref=hotnewsfeed&sfet=709&fin=0&fid=28283295275&ff_id=256450404&platform=10&expose_time=1572602798' #再次使用session进行请求的发送,该请求中已经携带了cookies res = session.get(url=get_url,headers=headers).text