首页 > 编程语言 >Python爬虫学习:Cookie 和 Session 的区别是什么?

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

时间:2022-12-26 16:24:37浏览次数:52  
标签:浏览器 Python maxAge 用户 Session Cookie 服务器

一、 含义

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,maxAge,用户,Session,Cookie,服务器
From: https://www.cnblogs.com/djdjdj123/p/17006074.html

相关文章

  • Python模块学习,模块是,什么
    模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。模块名要遵循Python变量命名规范,不要使用中文、特殊字......
  • python中主要的英语单词汇总
    path[pɑ:θ]路径unexpected[ˌʌnɪkˈspektɪd]不期望的class[klɑ:s]类usage[ˈju:sɪdʒ]使用public['pʌblik]公共的,公用的version[ˈvɜ:ʃn]......
  • 利用Python自动生成请假条
    哈喽兄弟们,今天咱们来实现用Python来批量生成请假条,这回既学了东西又做了事情,两不误~本文就将基于一个真实的办公案例进行讲解如何提取Excel内容并创建Word主要将涉......
  • cookies与session
    前期cookies最开始的浏览器,每次向服务器的请求都自报家门,即每发一次请求,都把用户名和密码都发过去:当用户第一次把用户名和密码输对了之后。浏览器自动保存用户名和密码。......
  • 盘点Python 中字符串的常用操作
    摘要:盘点Python中字符串的几个常用操作,对新手极度的友好。本文分享自华为云社区《​​盘点Python中字符串的常用操作,对新手极度友好​​》,作者:TT-千叶。在Python中字......
  • 盘点Python 中字符串的常用操作
    摘要:盘点Python中字符串的几个常用操作,对新手极度的友好。本文分享自华为云社区《盘点Python中字符串的常用操作,对新手极度友好》,作者:TT-千叶。在Python中字符串......
  • Mac 上安装python2和python3
    1.访问python官网https://www.python.org/downloads/ 选择想要下载的版本我选择的是3.11.1(2022-12-26最新版本)和以前的2.7.8 2.安装mpkg文件3.安装好了之......
  • python re.error: unterminated character set at position提示:字符串中包含[]{}()替
    re.error:unterminatedcharactersetatposition12这很可能是因为元字符“{}、[]、()”。有没有什么正则表达式可以让finditer忽略它?您必须转义正则表达式中的特殊......
  • python 函数 9
    1.定义函数#下面定义一个简单的函数,def关键字用来定义函数defgreet_user(username):print(f"hello-{username}")#调用greet_user('jesse')#实参和形参,上......
  • Python之进程管理
    使用python创建进程frommultiprocessingimportProcess #导入进程模块importtime#定义一个函数,测试创建进程使用deftask(name):print(name,'我是一个进......