cookies

cookie和session

无状态的http协议python

2019-11-01_17-14-32

  • 如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只须要发送页面请求,服务器返回内容。对于服务器来讲,并不关心,也并不知道是哪一个用户的请求。对于通常浏览性的网页来讲,没有任何问题。ajax

  • 可是,如今不少的网站,是须要用户登陆的。以淘宝为例:好比说某个用户想购买一个产品,当点击 “ 购买按钮 ” 时,因为HTTP协议 是无状态的,那对于淘宝来讲,就不知道是哪一个用户操做的。
  • 为了实现这种用户标记,服务器就采用了cookie这种机制来识别具体是哪个用户的访问。数据库

2019-11-01_17-15-32

  • 如图,为了实现用户标记,在Http无状态请求的基础之上,咱们须要在请求中携带一些用户信息(好比用户名之类,这些信息是服务器发送到本地浏览器的,可是服务器并不存储这些信息),这就是cookie机制。浏览器

  • 须要注意的是:cookie信息是保存在本地浏览器里面的,服务器上并不存储相关的信息。 在发送请求时,cookie的这些内容是放在 Http协议中的header 字段中进行传输的。安全

  • 几乎如今全部的网站都会发送一些 cookie信息过来,当用户请求中携带了cookie信息,服务器就能够知道是哪一个用户的访问了,从而不须要再使用帐户和密码登陆。服务器

  • 可是,刚才也提到了,cookie信息是直接放在Http协议的header中进行传输的,看得出来,这是个隐患!一旦别人获取到你的cookie信息(截获请求,或者使用你的电脑),那么他很容易从cookie中分析出你的用户名和密码。为了解决这个隐患,因此有了session机制。cookie

了解sessionsession

- 刚才提到了cookie不安全,因此有了session机制。简单来讲(每一个框架都不同,这只是举一个通用的实现策略),整过过程是这样:框架

  • 服务器根据用户名和密码,生成一个session ID,存储到服务器的数据库中。
  • 用户登陆访问时,服务器会将对应的session ID发送给用户(本地浏览器)。
  • 浏览器会将这个session ID存储到cookie中,做为一个键值项。
  • 之后,浏览器每次请求,就会将含有session ID的cookie信息,一块儿发送给服务器。
  • 服务器收到请求以后,经过cookie中的session ID,到数据库中去查询,解析出对应的用户名,就知道是哪一个用户的请求了。
总结

- 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
相关文章
相关标签/搜索