session和Cookies实现会话机制

原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080
本次代码的环境:
运行平台: Windows
Python版本: Python3.x
IDE: PyCharm

一、 前言

在写爬虫代码的时候,总是会先去找一个叫Cookie的东西,根据经验,可以知道,这个Cookie是用来保存客户端状态的一个工具,所以要爬取需要登录的网站时,一定要有这个Cookie。但是,其他的内容,就不是太清楚了。所以今天找了一些资料,自己提炼总结,来彻底了解这个叫Cookie的东西。当然,刚才说过了,Cookie是用来记录客户端网站的状态信息,那么在服务器端是用什么来记录网站的状态呢?这就是今天的第二个主人公,叫会话的东西(session)。接下来,废话少说,把他们的来龙去脉走一遍吧!

二、 详细介绍

其实在讲解具体的Cookies和Session前,还是先从静态和动态页面开始说起吧。

2.1 静态网页和动态网页

比如你想做一个页面,上面的内容只有你的联系方式,如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>This is my phoneNum</title>
	</head>
	<body>
		<div id= "container">
		<h2 class="title">我的电话号码是111111222</h2>
		</div>
	</body>
</html>

这是最基本的HTML代码(没有动态功能,不能连接数据库,没有JavaScript、JQuery、JSP、Ajax等动态语言),将其保存为一个hml文件,然后把它放到服务器上,其他人便可以通过访问服务器看到这个页面。类似的这种静态网页的内容是htmL代码编写的,文字、图片等内容均通过写好的HTML代码来指定并固定下来。他的特点是加载速度快,编写简单,但是存在很大的缺陷:内容一旦写下来,就无法通进行动态修改和动态传值,除非改变源代码的内容,但是这样又太过麻烦。因此,动态网页应运而生,它可以动态解析URL中参数的变化,关联数据库并动态展示不同的预先设定算法的内容。
其实,现在遇到的大多数网站都是动态网站,它们不再是一个简单的HTML,而是可能由JavaScript、JQuery、JSP、Ajax、JSP、PHP、Python 等语言编写的,其功能比静态网页强大和丰富太多了。此外,动态网站还可以实现用户登录和注册的功能,通过用户在指定接口处输入账号和密码,然后与数据库里面的提前存入的内容进行对比,这样可以实现用户的登陆功能。但是,问题又来了!比如你登陆了你的csdn账号,进入csdn访问博客。然后你关闭了浏览器页面,当你打开的时候你会发现,你依然是登陆状态,这是为啥呢?

2.2 HTTP的无状态性

你也许会想到,既然是通过HTTP协议传的内容,那是不是HTTP协议记录了用户的登陆信息呢?答案肯定不是,因为HTTP是绝对不允许可以记录状态信息的。
HTTP的无状态是指HTTP 协议对事务处理是没有记忆能力的, 也就是说服务器不知道客户端是什么状态。当我们向服分器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录。这意味着如果后续需要处理前面的信息,则必须重传,这导致需要额外传递些前面的重复请求, 才能获取后续响应,然而这种效果显然不是我们想要的。那么问题就来了,如何实现用户状态的记录呢?

2.3 Session和Cookie

所以,为了保持HTTP连接状态Session和Cookie就孕育而生了。Session是作用在服务端,用来保存用户的会话信息;Cookie是作用在客户端,也可以理解为浏览器端,有了Cookies,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别Cookies并鉴定出是哪个用户,然后再判断用户是否是登录状态,然后返回对应的响应。
这样,在爬虫中,当处理需要登录才能访问的页面时,可以采用先登录,然后获取的Cookies放在请求头里面直接请求,而不必重新模拟登录。

2.4 如何维持会话

接下俩就具体讲解如何用cookie来保持用户的登陆状态!当用户在指定接口输入登陆信息时,第一次请求服务器,此时服务器会返回一个请求头中带有set-cookie的相应传给客户端。然后客户端的浏览器会把cookie保存起来。当下次再次请求的时候,浏览器会把此Cookie 放到请求头一起提交给服务器,Cookies携带了会话ID,信息,服务器检查该Cookies即可找到对应的会话是什么,然后再判断会话来以此来辨认用户状态,如下图所示。


在这里插入图片描述
在成功登录某个网站时,服务器会告诉客户端设置哪些Cookies 信息,在后续访问页面时客户端会把Cookies发送给服务器,服务器再找到对应的会话加以判断。如果会话中的某些设置登录状态的变量是有效的,那就证明用户处于登录状态,此时返回登录之后才可以查看的网页内容,浏览器再进行解析便可以看到了。反之,如果传给服务器的Cookies 是无效的,或者会话已经过期了,我们将不能继续访问页面,此时可能会收到错误的响应或者跳转到登录页面重新登录。
所以,Cookie和Session需要配合,一个处于客户端, 一个处于服务端,二者共同协作,就实现了登录会话控制。

2.5 认识cookies属性

接下来认识一下cookies都有哪些属性,如下图所示:
 


在这里插入图片描述

属性 解释
Name 该Cookie的名称,一且创建,该名称便不可更改。
Value 该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。
Domain 可以访问该Cookie的域名。例如,如果设置为weibo.com的域名都可以访问该Cookie.
Max Age 该Cookie失效的时间,单位为秒,也常和Expires 起使用,通过它可以计算出其有效时间。Max Age如果为正数,则该Cookie在Max Age秒之后失效。如果为负数,则关闭浏览器时Cookie即失效,浏览器也不会以任何形式保存该Cookie。
Path 该Cookie 的使用路径。如果设置为/path/, 则只有路径为/path/的页面可以访问该Cookie。如果设置为/,则本域名下的所有页面都可以访问该Cookie。
Size字段 此Cookie的大小。
HTTP字段 Cookie的httponly 属性。若此属性为true, 则只有在HTTP头中会带有此Cookie的信息,而不能通过document.cookie来访问此Cookie。
Secure 该Cookie是否仅被使用安全协议传输。安全协议有HTTPS和SSL等,在网络上传输数据之前先将数据加密。默认为false。

三 总结

这篇博文就写到这了,一句话总结就是,因为网站不是纯静态的,所以需要HTTP协议传输,又因为HTTP协议是无状态的,所以必须找一个东西来记录用户的登陆状态,这样cookies和Session就孕育而生了。同时,Cookie和Session相互配合,一个处于客户端, 一个处于服务端,二者共同协作,就实现了登录会话控制。这篇文章就到这里了,欢迎大佬们多批评指正,也欢迎大家积极评论多多交流。
 

 
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42555080/article/details/88369752