【Python爬虫】—— Session 与 Cookies

静态网页和动态网页


静态网页
<!DOCTYPE html>
<html> 
<head>
<meta charset="UTF-8">
<title>This is a Demo</title>
</head>
<body> 
<div id="container">
<div class="wrapper">
<h2 class="title"> Hello World</h2>
<p class="text">Hello,this is a paragraph.</p>
</div>
</div>
</body>
</html> 

这种网页内容由 HTML 代码编写,文字、图片等内容均通过写好的 HTML 代码来指定,页面叫作静态网页,加载速度快,编写简单。

但存在很大的缺陷,如可维护性差,不能根据URL灵活多变地显示内容等。因此,动态网页应运而生,它可以动态解析 URL 中参数的变化,关联数据库并动态呈现不同的页面内容,非常灵活多变。

而现在遇到的大多数网站都是动态网站,不再是一个简单的 HTML,可能是由 JSP、PHP、 Python 等语言编写的,其功能比静态网页强大和丰富太多。动态网站还可以实现用户登录和注册的功能


无状态HTTP

HTTP特点之一 —— 无状态
是指 HTTP 协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态,意味着如果后续需要处理前面的信息,则必须重传,这也导致需要额外传递一些前面的重复请求,才能获取后续响应。


Session

在服务端(网站的服务器)
用来保存用户的 Session 信息

Session(会话) 本身的含义是指有始有终的一系列动作 / 消息。比如打电话时,从拿起电话拨号到挂断电话这中间的一系列过程可以称为一个 Session,在 Web 中,Session 对象用来存储特定用户 Session 所需的属性及配置信息。

Cookies

在客户端(可以理解为浏览器端)
浏览器在下次访问网页时会自动附带上
它发送给服务器,服务器通过识别 Cookies 并鉴定出是哪个用户,然后再判断用户是否是登录状态,进而返回对应的响应。

Cookies 指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据。


当客户端第一次请求服务器时
服务器会返回一个响应头中带有 Set-Cookie 字段的响应给客户端,用来标记是哪一个用户,客户端浏览器会把 Cookies 保存起来。

当浏览器下一次再请求该网站时
浏览器会把此 Cookies 放到请求头一起提交给服务器
Cookies 携带了 Session ID 信息,服务器检查 Cookies 即可找到对应的 Session 是什么,然后判断 Session 以此来辨认用户状态。

在成功登录某个网站时
服务器会告诉客户端设置哪些 Cookies 信息,在后续访问页面时客户端会把 Cookies 发送给服务器,服务器再找到对应的 Session 加以判断。如果 Session 中的某些设置登录状态的变量是有效的,就证明用户处于登录状态。
此时返回登录之后才可以查看的网页内容,浏览器再进行解析便可以看到了。


Session(在服务端)、Cookies(在客户端),二者共同协作,实现了登录 Session 控制。

Cookies

会话 Cookie 就是把 Cookie 放在浏览器内存里,浏览器在关闭之后该 Cookie 即失效。
持久 Cookie 则会保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户登录状态。

实际上,没有会话 Cookie 和持久 Cookie 之分,只是由 Cookie 的 Max Age 或 Expires 字段决定了过期的时间。


在谈论 Session 机制时,常听到这样一种误解 —— “只要关闭浏览器,Session 就消失了”。对Session来说,除非程序通知服务器删除一个 Session,否则服务器会一直保留,比如程序一般都是在我们做注销操作时才去删除 Session。当关闭浏览器时,浏览器不会主动在关闭之前通知服务器它将要关闭,所以服务器根本不会有机会知道浏览器已经关闭。

由于关闭浏览器不会导致 Session 被删除,这就需要服务器为 Session 设置一个失效时间,当距离客户端上一次使用 Session 的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把 Session 删除以节省存储空间。


Reference:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=46#/detail/pc?id=1665

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章