网络爬虫day02

cookies是什么

Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。

session

原文[[https://blog.csdn.net/hjc1984117/article/details/53995816]](%E5%8E%9F%E6%96%87%5Bhttps://blog.csdn.net/hjc1984117/article/details/53995816%5D)
首先,我大致的知道,session是一次浏览器和服务器的交互的会话,会话是啥呢?就是我问候你好吗?你回恩很好。就是一次会话,那么对话完成后,这次会话就结束了,还有我也知道,我们可以将一个变量存入全部的$_SESSION[‘name’]中,这样php的各个页面和逻辑都能访问到,所以很轻松的用来判断是否登陆。

这是我之前理解的session,当然也是对的,只是解释的太肤浅,理解的太表面了,面试官如果听到这样的答案其实是不太满意的。我参考了其他的很多资料,彻底理解清楚session。

在说session是啥之前,我们先来说说为什么会出现session会话,它出现的机理是什么?我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,学过计算机的应该都知道这个协议,它是无状态的,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。但是这种无状态的的好处是快速。

所以就会带来一个问题就是,我希望几个请求的页面要有关联,比如:我在www.a.com/login.php里面登陆了,我在www.a.com/index.php 也希望是登陆状态,但是,这是2个不同的页面,也就是2个不同的HTTP请求,这2个HTTP请求是无状态的,也就是无关联的,所以无法单纯的在index.php中读取到它在login.php中已经登陆了!

那咋搞呢?我不可能这2个页面我都去登陆一遍吧。或者用笨方法这2个页面都去查询数据库,如果有登陆状态,就判断是登陆的了。这种查询数据库的方案虽然可行,但是每次都要去查询数据库不是个事,会造成数据库的压力。

所以正是这种诉求,这个时候,一个新的客户端存储数据方式出现了:cookie。cookie是把少量的信息存储在用户自己的电脑上,它在一个域名下是一个全局的,只要设置它的存储路径在域名www.a.com下 ,那么当用户用浏览器访问时,php就可以从这个域名的任意页面读取cookie中的信息。所以就很好的解决了我在www.a.com/login.php页面登陆了,我也可以在www.a.com/index.php获取到这个登陆信息了。同时又不用反复去查询数据库。

虽然这种方案很不错,也很快速方便,但是由于cookie 是存在用户端,而且它本身存储的尺寸大小也有限,最关键是用户可以是可见的,并可以随意的修改,很不安全。那如何又要安全,又可以方便的全局读取信息呢?于是,这个时候,一种新的存储会话机制:session 诞生了。

我擦,终于把session是怎么诞生的给圆清楚了,不容易啊!!!

好,session 诞生了,从上面的描述来讲,它就是在一次会话中解决2次HTTP的请求的关联,让它们产生联系,让2两个页面都能读取到找个这个全局的session信息。session信息存在于服务器端,所以也就很好的解决了安全问题。

携带cookie请求

  • 携带一堆cookie进行请求, 把cookie组成cookie池

请求登录之后的网站的思路

  • 实例化session
  • 先使用session发送请求, 登录对网站,把cookie保存在session中
  • 再使用session请求登陆之后才能访问的网站, session能够自动的携带登录成功时保存在其中的cookie,进行请求 (这里的session是指requests中的session)

处理cookies、session请求

  • requests中提供了一个session类,来实现客户端与服务端的会话保持
  • 使用方法:
    – 1、实例化一个session对象
    – 2、让session发送get或post请求
    • session = requests.session()
    • r = session.get(url, headers)

不发送post请求,使用cookie获取登陆后的页面

  • cookie过期时间很长的网站
  • 在cookie过期之前能够拿到所有的数据, 比较麻烦
  • 配合其他程序一起使用, 其他程序专门获取cookie,当前程序专门请求页面

字典推导式-

cookie =‘anonymid=joijrcfyg43s6depovince=GX; r01=1; JSESSIONID=abcbsaOhcG5gg_wdJqxCw; ick_login=cfaa491f-88a3-4f2e-b79d-1439884ab810; ch_id=10050; ick=df7a42f9-31af-40b4-9d46-8e7db6f4f026; XNESSESSIONID=4c79b6491259; first_login_flag=1; ln_uact=18897779580; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; loginfrom=syshome; jebe_key=b8c54fcd-fd41-4a30-959b-aaf0f4f79430%7C84c62ba7ded7a47de949da8c6d331f05%7C1542285980221%7C1%7C1542285978716; wp_fold=0; jebecookies=ec7ad5e3-44bf-41cb-a3d6-1738342f9642|||||; _de=4EA51C10CB95E92B1251091C3AB7E656; p=44c0c54e9aa1082ce3df8f92db4da8143; t=5a30bd835a023dd447b888e3dba32d143; societyguester=5a30bd835a023dd447b888e3dba32d143; id=968748233; xnsid=e88c9a38’

– cookies = {i.split("=")[0] : i.split("=")[1] for i in cookies.split(";")}

猜你喜欢

转载自blog.csdn.net/qq_42899028/article/details/84109963