Java 杂谈爬虫Java

手把手教你用Python实现分布式爬虫(五) - scrapy知

2019-03-25  本文已影响2人  JavaEdge

1 session与cookie

首先要理解session和cookie的区别,这是理解模拟登录和网站交互的基础。
cookie是浏览器支持的本地存储方式,是以dict键值对的方式存储的,在浏览器文件中是文本的形式,浏览器会对这个文本进行解析。

Http本身是一种无状态协议,服务器在接收到浏览器的请求之后,直接返回内容给浏览器,不管浏览器是谁请求的。比如浏览新闻的网站,不在乎是谁发起的浏览请求。但是对于像淘宝这种需要记住请求是由哪个对象发起的时候,无状态协议就不能做到了。
有状态请求如下:

cookie的作用就是在浏览器A访问服务器的时候,就给这个A一个id,浏览器会将这个id保存到本地,cookie中,后来的请求都会带着这个id,浏览器就会知道是哪个对象。浏览器为了安全性,cookie存储是有很多要求的,比如服务器A传过来的cookie是放在服务器A的域之下的,是不能跨域访问的,这是一种安全机制。

比如用处就是,当一个用户用登录名密码登陆后,服务器将这些信息作为cookie返回了,下一次登录的时候就可以从本地自动获取信息进行登录,不需要再输用户名和密码了。但是,同时也就出现了安全隐患,只要有人拿着电脑,就能从本地cookie中查看信息浏览记录等。
有状态请求中,第一次请求后发现没有id,服务器就会分配一个id,这个id可以是userid,也可以是任意一段随机的字符串,可以叫做sessionid。每个框架生成session的机制是不一样的,
为了解决cookie的泄露隐患,就产生了session,比如说用户注册登录之后,根据它的用户名和密码名生成sessionid,并且将这个id发给用户,浏览器将这个sessionid存在cookie中,然后再次请求服务器的时候,服务器就知道是谁在请求,取出这个用户对应的信息。

2 cookie与session的主要区别

服务器识别同一个操作对象的原理

服务器中可能有一张session表来记录访问的对象,有session_id,session_data,以及过期时间,如果当前没有浏览器正在访问这个网站,那么session表就为空。如果有账号登录成功,这个表中就会有一条记录,有服务器给用户返回的id,有用户的加密后的数据等。这个sessionid会返回给浏览器,保存在cookie当中,后面浏览器在对这个网站的页面进行访问的时候都会带着sessionid,然后服务器就不需要知道你的用户名和密码,就知道是哪个用户了。尽管sessionid放在cookie中虽然有过期时间,但是也不安全的,坏人获取了sessionid就能浏览你的信息了,可是相对于cookie中的账号名密码这种而言,还是安全的多,至少需要用sessionid模拟登录又或者必须会盗用sessionid。所以,浏览网站最后需要退出登录,就会清空sessionid信息了。

ssesion技术

本身有两部分
知道浏览器两次访问是同一个人,这是用cookie 保存sessionid实现的
在服务端的session对象的内容,可以访问到,这些变量信息时存在服务器的中的。

3 selenium模拟知乎登录

上一篇下一篇

猜你喜欢

热点阅读