cookie的讲解

cookie

Cookie主要分为两种:

  • 会话Cookie:不设置过期时间,保存在浏览器的内存中,关闭浏览器,Cookie便被销毁
  • 普通Cookie:设置了过期时间,保存在硬盘上

关于cookie

因为最开始的cookie是网景公司定义的,后来又有了RFC版本所以当前的Cookie有两个版本: Version 0 Version 1他们有两种设置
响应头的标识,分别是: Set-Cookie和Set-Cookie2,这也造成 了一些属性的不同,这里需要注意:常用的为Version 0

version0的属性

  • NAME = Value :键值对设置要保存的Name/Value,这里的name不能喝其他属性的名字一样
  • Expires:过期时间
  • Domain:生成该Cookie的域名
  • Path:该Cookie是在当前的哪个路径 下生成
  • Secure:如果设置了这个属性,那么只会在SSH连接时才会回传该Cookie

version1的属性

  • Name=VALUE:键值对设置要保存的Name/Value,这里的name不能喝其他属性的名字一样
  • Comment:主是想,用于说明该Cookie有什么用途
  • CommentURL :该服务器为此COokie提供URI注释
  • Discard:是否在回话结束丢弃该Cookie,默认为false
  • Domain:生成该Cookie的域名
  • Max-Age:最大失效时间,与Version 0不同的是这里设置的是在多少秒后失效
  • Path:该Cookie是在当前的哪个路径下生成
  • Port:该Cookie在什么端口下可以回传服务端,如果有多个端口,以逗号隔开
  • Secure:如果设置了这个属性,那么只会在SSH连接时才会回传该Cookie

Cookie的用法

当第一次访问某个网站的时候,服务器会给你发一个特定的cookie,之后你每次访问这个站点其他网页,你发送的请求头里都会带上相应的cookie,这样服务器便知道这俩请求是同一个客户发送的。

requests.session的原理
requests.session的原理是:通过创建requests.session对象,用该对象访问或者登录,该对象就会获取并记录第一次访问的cookie,再用该对象访问其他网页,该对象都会使用该cookie。

为requests.session设置默认属性
为requests.session提前设置的各种属性,如果get方法内没有参数的话,就会默认使用提前设置好的,如果有的话,会使用get中的参数。(在发送的html请求中,想省略session对象中设置的默认属性中的某一键值对,只需再get方法中用参数的形式将那个键的值设置为 None,那个键就会被自动省略掉)

为requests.session设置默认cookie
通过requests.utils.add_dict_to_cookiejar对session对象设置cookie,之后所有的请求都会自动加上自定义的cookie内容。

mycookie = { "PHPSESSID":"56v9clgo1kdfo3q5q8ck0aaaaa" }
x = requests.session()
requests.utils.add_dict_to_cookiejar(x.cookies,{"PHPSESSID":"07et4ol1g7ttb0bnjmbiqjhp43"})
x.get("http://127.0.0.1:80",cookies = mycookie)

也可以通过requests.utils.cookiejar_from_dict 先生成一个cookiejar对象,时候在赋值给x.cookies。貌似还可以使用x.cookies.set()或者x.cookies.update()。

为requests.session对象设置headers 的方法:

s.headers.update(headers)
s = requests.Session() 
# 设置session对象的auth属性,用来作为请求的默认参数 
s.auth = ('user','pass') 
# 设置session的headers属性,通过update方法,将其余请求方法中的headers属性合并起来作为最终的请求方法的headers 
s.headers.update({'x-test': 'true'}) 
# 发送请求,这里没有设置auth会默认使用session对象的auth属性,这里的headers属性会与session对象的headers属性合并 
r = s.get('http://httpbin.org/headers',headers={'x-test2': 'true'}) 
# 查看发送请求的请求头 
r.request.headers

获取到cookie

import requests
response = requests.get('https://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
    print(key,'==',value)

cookie的一个作用就是可以用于模拟登陆,做会话维持

import requests
session = requests.session()#创建一个session对象
session.get('http://httpbin.org/cookies/set/number/12456')#首先访问一次,并记录这个网站的cookie,这时这个session对象就已经有该网站的cookie了
response = session.get('http://httpbin.org/cookies')#使用刚才记录的cookie访问网站,就能做到用以前的cookie登录网站了
print(response.text)

cookie和session区别

cookie数据存放在客户的浏览器上,session数据放在服务器上

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

Cookie与session是相辅相成的,服务器保存session,客户端保存cookie,当客户端访问时把cookie传进来了,服务器再根据cookie去session中核对,从而确定该用户。相当于cookie保存的是键,session中保存的是键值对,服务器通过传进来的键,在自己的session字典中查找。服务器也可以用session去核对传进来的cookie,例如cookie保存的是用户的id与密码的加密形式,session记录同样的信息,下次传入cookie,去session中核对,看cookie是否被篡改。

从安全考虑session安全可是占用服务器资源,cookie虽然不占用资源,但是不安全。一般都是不重要的信息保存在cookie,重要信息保存在session。

Cookie负责告诉服务器来访问的是谁,session负责记录该用户做过什么事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值