Python爬虫学习:Cookie 和 Session 的区别是什么?

一、 含义

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份,怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了,这就是Cookie的工作原理。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。所以Cookie是客户端技术。

Session可以理解为一个抽象概念,即会话,会话用于记录一个用户在我们网站上的一些行为、一些状态,可以理解为一个上下文,这些用户状态可以利用Cookie中的Session ID来标识。

在另外的一些语境下,Session又可以指在后台保存用户状态来实现会话的方式,它把用户状态存储在后台的内存、数据库等介质中,然后我们利用请求的Cookie中保存的Session ID来为这个请求找到它对应的会话。

Session是服务器端技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的Session对象,由于Session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的Session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的Session中取出数据为用户服务。

二、有效时长:

Cookie的maxAge决定着Cookie的有效期,单位为秒。

如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。

如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。

如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。

由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

三、面试中可能会遇到的问题点

  1. Session 在服务器端,Cookie 在客户端(浏览器)
  2. Session 默认被存在在服务器的一个文件里(不是内存)
  3. Session 的运行依赖 Session id,而 Session id 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie ,同时 Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session_id)
  4. Session 可以放在 文件、数据库、或内存中都可以。
  5. Cookie具有不可跨域名性

四、在反爬技术中的应用

在一些网站中,需要用户以个人信息登陆上去才能看到更多的信息。如果利用爬虫程序模拟人登陆的行为,主要有以下三种:

  1. 代码里通过request.post里的参数data中,包含自己的用户名和密码,但是这样及其不安全

  2. 访问页面的时候打开开发者工具,从header是中找到cookie并复制,写到python脚本里的headers中。这种方法的问题就是上文提到了Cookie是有时效性的,这种方法需要手动替换比较麻烦,也不推荐。

  3. 通过session方法,后续使用类比于request.get 、request.post 等。最推荐的一种方法,代码如下:

data = {
    "name": "填写用户名",
    "passwd": "填写登陆密码"
  }
# python学习交流群:711312441
# 通过session模拟登录,每次请求带着session
s = requests.Session()
f = s.post(url, data=data, headers=headers)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫学习:Cookie 和 Session 的区别是什么? - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python教程:常用网页字符串处理技巧

    首先一些Python字符串处理的简易常用的用法。其他的以后用到再补充。 1.去掉重复空格 s = “hello hello hello” s = ‘ ‘.join(s.split()) 2.去掉所有回车(或其他字符或字符串) s = “hello\nhello\nhello hello\n” print(s) s = s.replace(“\n”,””) p…

    Python开发 2023年4月2日
    00
  • python学习:获取指定目录下所有文件名os.walk和os.listdir

    1.os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文件夹下路径如下: import os def file_name_walk(file_dir): for root, dirs, files in os.walk(file_dir): print(“root”, root) # 当前目录路径 print(“dirs”, dirs) #…

    Python开发 2023年4月2日
    00
  • Python:numpy模块最详细的教程

    一、numpy简介 numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 numpy是Python的一种开源的数值计算扩展库。这种库可用来存储和处理大型numpy数组,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)。 numpy库有两个作…

    Python开发 2023年3月31日
    00
  • Python学习:len() 函数详解:获取字符串长度或字节数、join()方法:合并字符串

    Python中,要想知道一个字符串有多少个字符(获得字符串长度),或者一个字符串占用多少个字节,可以使用len()函数。 语法格式: len(string) string 用于指定要进行长度统计的字符串 示例: a = ‘www.baidu.com’ print(len(a)) 输出 13 在 Python 中,不同的字符所占的字节数不同,数字、英文字母、小…

    Python开发 2023年4月2日
    00
  • 5个非常有意思的python代码,谁运行谁知道

    Python 能做很多无聊,但有意思的事情,例如接下来的一些案例。 Python 整蛊程序 以下程序,不要发代码,要不实现不了你整蛊的目的。 要打包成一个 exe 程序,发给朋友才有意思。 使用 pip install pyinstaller。 打包命令如下: pyinstaller -F 文件名.py 过程中如果出现 BUG(一般是编码错误),点击导航查看…

    Python开发 2023年4月2日
    00
  • python练习题:求10万以内的质数

    1、使用质数定义计算 #version1import datetime #导入模块计算效率start = datetime.datetime.now() count = 0 for x in range(2,100000): #求指定范围内的质数 for i in range(2,x): #除以1和本身之外的数 if x % i == 0: break el…

    Python开发 2023年4月2日
    00
  • python学习:map函数和filter函数用法教程

    map()函数可以对一个数据进行同等迭代操作。 例如: def f(x): return x * x r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) print(list(r)) map函数传入的第一个参数就是函数本身,即f。第二个参数是要操作的数据 map() 作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简…

    Python开发 2023年4月2日
    00
  • python3教程:json、pickle和sqlite3持久化存储字典对象

    在各种python的项目中,我们时常要持久化的在系统中存储各式各样的python的数据结构,常用的比如字典等。尤其是在云服务类型中的python项目中,要持久化或者临时的在缓存中储存一些用户认证信息和日志信息等,最典型的比如在数据库中存储用户的token信息。在本文中我们将针对三种类型的python持久化存储方案进行介绍,分别是json、pickle和pyt…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部