在浏览网站的过程中,我们经常会遇到需要登录的情况。有些页面只有登录后才能访问,登录后可以连续多次访问该网站,但有时过一会儿又需要重新登录。还有一些网站是打开浏览器就自动登录的,而且很久都不会过期。这是为什么呢?实际上,它涉及到Session和cookie的知识,所以本节将揭开它们的神秘面纱。
1元。静态和动态网页

在开始之前,我们需要了解静态网页和动态网页的概念。以下是之前的示例代码,内容如下:
这是一个演示Hello World Hello,这是一个段子。
这是最基本的HTML代码。我们把它保存为test.html文件,然后把它放在有固定公共IP的主机上。主机配有Apache或者Nginx之类的服务器,这样这台主机就可以作为服务器使用,其他在武汉的日日夜夜都可以通过访问服务器看到这个页面。这是最简单的网站。这类网页的内容是用HTML代码编写的,文字、图片等内容由编写的HTML代码指定。这种网页称为静态网页。加载速度快,编写简单,但是有很多缺陷,比如可维护性差,不能根据URL灵活显示内容。举个例子,如果我们想给这个网页的URL传入一个name参数,它就不能在网页中显示。
于是,动态网页应运而生,可以动态分析URL参数的变化,关联数据库,动态呈现不同的页面内容,非常灵活多变。我们现在遇到的大部分网站都是动态网站。它们不再是简单的HTML,可能是用JSP、PHP、Python等语言编写的。它们的功能比静态网页强大和丰富得多。此外,动态网站还可以实现用户登录和注册的功能。
回到开头提到的问题,很多页面只有登录后才能查看。按照一般的逻辑,输入用户名和密码登录后,一定是拿到了类似凭据的东西。有了它,我们可以保持登录状态,访问只有登录后才能看到的页面。
那么,这个神秘的证书到底是什么呢?其实是Session和cookie的结果。让我们找出答案。
冠军联赛。无状态HTTP
在了解会话和cookie之前,我们还需要了解HTTP的一个特性,叫做无状态。
HTTP的无状态性是指HTTP协议没有用于事务处理的内存,也就是说服务器不知道客户端是什么状态。当我们向服务器发送请求时,服务器解析请求,然后返回相应的响应。服务器负责完成这个过程,这个过程是完全独立的。服务器不会记录前后状态的变化,也就是缺少状态记录。这意味着如果后面需要处理前面的信息,就必须重新传输,这就导致需要传递一些前面的重复请求,才能获得后面的响应。但是,这种效果显然不是我们想要的。为了保持前后的状态,我们肯定不能把之前的请求都重发一次,这样很浪费资源,对于需要用户登录的页面就更棘手了。
这时,出现了两种维护HTTP连接状态的技术,它们是会话和cookie。会话服务器,即网站的服务器,用于保存用户的会话信息;在客户端,cookies也可以理解为浏览器端。有了cookies,浏览器下次访问网页时会自动将它们附加到服务器上。服务器会通过识别cookies来识别是哪个用户,然后判断用户是否登录,然后返回相应的响应。
我们可以理解为cookie保存了登录凭证。有了它,我们只需要在下一个请求中发送带有cookie的请求,而无需重新输入用户名、密码等信息再次登录。
所以在爬虫中,有时候在处理需要登录才能访问的页面时,我们一般会直接把成功登录后获得的cookie放到请求头中直接请求,而不用重新模拟登录。
好了,了解了Session和cookie的概念之后,我们来详细分析一下它们的原理。
3.会议
会话,中文叫Session,原意是一系列有始有终的动作/消息。比如打电话,从拿起电话拨号到挂断电话的一系列过程,可以称为一个会话。
在Web中,会话对象用于存储特定用户会话所需的属性和配置信息。这样,当用户在应用程序的网页之间跳转时,存储在Session对象中的变量不会丢失,而会一直存在于整个用户会话中。当用户从应用程序请求网页时,如果用户没有会话,Web服务器将自动创建一个会话对象。当会话过期或被放弃时,服务器将终止会话。

4.饼干
cookies通常也以复数形式使用,指的是一些网站存储在用户本地终端上的数据,用于识别用户和跟踪会话。
会话维护
那么,我们如何使用cookies来保持状态呢?当客户端第一次请求服务器时,服务器将向客户端返回一个响应,在响应头中设置Kramp-Karrenbauer Set-cookie字段,以标记是哪个用户,客户端浏览器将保存cookie。下次浏览器再次请求网站时,浏览器会把这个cookie放在请求头中,提交给服务器。cookie携带会话ID信息。服务器可以通过检查cookie找出对应的会话是什么,然后判断会话来识别用户状态。
当成功登录到一个网站时,服务器将告诉客户端设置什么样的cookies信息。在后续对页面的访问中,客户端会向服务器发送cookies,服务器会找到相应的会话进行判断。如果会话中设置登录状态的一些变量有效,则证明用户处于登录状态。此时返回登录后可以查看的网页内容,浏览器解析后可以看到。
相反,如果传递给服务器的cookies无效,或者会话已经过期,我们将无法继续访问该页面。这时,我们可能会收到错误响应,或者跳转到登录页面重新登录。
所以cookies和Session需要配合,一个在客户端,一个在服务器端。当它们协同工作时,就实现了登录会话控制。
属性结构
接下来,我们来看看cookies的内容。以知乎为例。在浏览器开发者工具中打开应用选项卡,然后左边会有一个存储部分,最后一项是cookies。点击它,如图。
cookies列表
可以看到,这里有很多条目,每个条目都可以称为一个cookie。它具有以下属性。
名称,即cookie的名称。cookie一旦创建,就不能更改名称。值,也就是这个cookie的值。如果值是Unicode字符,则需要对该字符进行编码。如果值是二进制数据,则需要使用base64编码。域,即可以访问此cookie的域名。例如,如果设置为. zhihu.com,所有以zhihu.com结尾的域名都可以访问此cookie。Path,也就是这个cookie的使用路径。如果将其设置为/path/,则只有路径为/path/的页面可以访问此cookie。如果设置为/,则该域名下的所有页面都可以访问该cookie。Kramp-Karrenbauer age,即cookie过期的时间,以秒为单位,通常与Expires一起使用,通过它可以计算有效时间。如果Kramp-Karrenbauer MAXAGE为正值,cookie将在Kramp-Karrenbauer MAXAGE秒后过期。如果为负,浏览器关闭时cookie无效,浏览器不会以任何形式保存cookie。Size字段,即该cookie的大小。HTTP字段,即cookie的httponly属性。如果该属性为true,则HTTP头中将只携带该cookie的信息,不能通过document.cookie Secure访问该cookie,即是否只使用安全协议传输cookie。安全协议包括HTTPS和SSL等。数据在网络上传输之前会被加密。其默认值为false。
会话cookie和持久cookie
从表面上看,会话cookie是将cookie放在浏览器的内存中,浏览器关闭后cookie就会失效。永久cookie将被保存到客户端的硬盘上,下次可以再次使用,以保持用户长时间登录。
实际上,严格来说,会话cookie和持久cookie没有区别,但是过期时间是由cookie的Max Kramp-Karrenbauer Age或Expires字段决定的。
所以有些持久登录的网站,其实把cookies的有效时间和Session的有效时间都设置的比较长。下次再访问页面,还是会带着之前的cookies,可以直接保持登录状态。
һѪ5Ѫ。常见的误解
在谈到会话机制的时候,我们经常会听到这样一个误区——“只要你关闭浏览器,会话就会消失”。想象一个会员卡的例子。除非客户主动把卡卖给店家,否则店家绝对不会轻易删除客户的信息。对于会话也是如此,除非程序通知服务器删除一个会话,否则服务器会一直保留它。例如,程序通常会在我们注销时删除会话。
但是当我们关闭浏览器的时候,浏览器在关闭之前是不会主动通知服务器会关闭的,所以服务器根本不会有机会知道浏览器已经关闭了。造成这种错觉的原因是大多数网站使用会话cookies来保存会话ID信息。但是,当浏览器关闭后,cookies就消失了,再次连接服务器时,就找不到原来的会话了。如果将服务器设置的cookie保存在硬盘上,或者通过某种手段重写浏览器发送的HTTP请求头,将原来的cookie发送给服务器,那么浏览器就可以重新打开,仍然可以找到原来的会话ID,仍然可以保持登录状态。

而正是因为关闭浏览器不会导致会话被删除,这就需要服务器为会话设置一个到期时间。当客户端使用的最后一个会话的时间超过此到期时间时,服务器可以认为客户端已经停止其活动,并将删除会话以节省内存/Kim Hye Yoon/K0/曹政奭。
6元。摘要
本节介绍了Session和cookie的基本概念,对后面的网络爬虫开发有很大的帮助,需要很好的掌握。
由于涉及到一些专业术语,本节部分内容的参考来源如下:
文档会话Kramp-Karrenbauer Kramp-karren Bauer百科全书:file/tupian/20220808/error.html Bauer cookie Kramp-karren Bauer百科全书:file/tupian/20220808/error.html Bauer HTTP cookie Wikipedia:https://en . Wikipedia . org/wiki/HTTP _ cookie博客Kramp-karren Bauer会话和几个状态保持方案了解:http://www.mamicode.com/info-detail-46545.html


