首页 > 其他分享 >Cookie的使用

Cookie的使用

时间:2024-04-22 19:56:26浏览次数:14  
标签:__ resp 域名 cookie 设置 使用 Cookie

Cookie也被称作Cookies,它是一种让网站的服务器端可以把少量数据存储在客户端的硬盘或内存中,而后续又可以从客户端中读取该数据的技术。

  • 在网站中,http请求是呈无序状态的
  • 无序状态是指协议对于事务处理没有记忆能力,同一个服务器上你新打开的网页和之前打开的网页之间没有任何联系,你的当前请求和上一次请求究竟是不是一个用户发出的,服务器也无从得知;
  • 为了解决这一问题,就出现了Cookie技术
  • 当用户访问服务器并登录成功后,服务器向客户端返回一些数据(Cookie);
    客户端将服务器返回的Cookie数据保存在本地,当用户再次访问服务器时,浏览器自动携带Cookie数据给服务器,服务器便知道访问者的身份信息了;
    值得注意的是,浏览器发送的是当前本地保存的所有作用在当前域且在有效期内的cookie;
    也就是说由上一次访问当前网站某一板块时服务器发送的旧cookie如果未过期,在访问其他板块的新请求中也会被携带,一同发送出去。这就是为什么有些时候我们抓包获取到了cookie,但用它测试连接时却发现这个cookie可有可无;
    单个Cookie数据大小一般规定不超过3KB。

 

设置cookie

  • Cookie一般通过Response对象的set_cookie()方法来设置,其基本语法如下:

# 前两个参数必须设置,后续参数则为可选参数
set_cookie(key,value[,max_age,expires,path,domain,secure,httponly,samesite])

 

    key(或name)        必需项,规定cookie的名称,字符串
    value           必需项,规定cookie的内容,字符串
    max_age         可选项,规定cookie的失效时间(单位:秒),
                  与expires同时设置时,其优先级更高
    expires           可选项,规定cookie的有效期,使用具体日期
    path           可选项,规定cookie在当前web下那些目录有效,
                默认情况下为所有目录"/"有效
    domain           可选项,规定cookie作用的有效域(如:127.0.0.1)或域名(如:baidu.com),
                默认情况下只作用于设置该cookie的域
    secure           可选项,规定cookie是否只能通过安全的HTTPS连接传输,默认关闭
    httponly         可选项,规定cookie是否只能被HTTP连接访问,默认关闭
                即是否拒绝JavaScript访问Cookie
    samesite         可选项,规定cookie是否只能被附加在同一站点(客户端)的请求中

每添加一个cookie,就调用一次Response.set_cookie()方法,示例代码如下:

from flask import Flask,request,Response

app = Flask(__name__)

@app.route('/')
def set_cookie():
"""
实例化Response对象时可以传入三个参数:
data:需要生成响应的数据。
status:响应的状态码。
平时我们请求接口的时候,如果成功状态码是200,Flask中这个状态码可以修改,在反爬虫中用处很大。
如我将数据成功返回,而状态码是401,那么其他人爬虫的时候就不会爬这些数据。
headers:设置请求头。
"""
resp = Response("设置Cookie!")
# 前两个参数默认传给key和value
resp.set_cookie("username","zhangsan",path='/static')
resp.set_cookie("password","123456",max_age=3600)
# 将Response对象作为响应return
return resp

if __name__ == '__main__':
app.run(debug=True)

 

  • 除此之外,我们也可以通过修改响应对象Response的表单头headers来设置cookie:

@app.route('/h')
def set_cookie_h():
resp = Response("设置Cookie!")
# 通过添加表头的键值对来实现cookie设置
# 第一项为key=value,需要同时设置这两个参数,后续项则用分号分隔
resp.headers['Set-Cookie'] = " testname = lisi; Expires = SUN,01-Nov-2021 05:10:12 GMT; Max-Age=3600; path=/ "
return resp

 

查看cookie

在响应报文中设置了Cookies后,客户端在向服务器端发送一次请求(如登录操作)后,浏览器便会获取并保存该域名对应的cookie,这时我们可以通过request.cookies方法来查看我们发送的请求报文中携带的cookie;
该方法返回的是一个字典对象,所以我们想要查看指定key的value,可以使用:request.cookies.get('<key>')或request.cookies['<key>']

@app.route('/g')
def get_cookie():
# 因为我们为key=username的cookie设置的工作目录为子一级的static,
# 所以工作在当前目录下的程序无法获取该cookie的value,返回为None
username=request.cookies.get('username')
# 这两个cookie都可以直接获取value
password=request.cookies.get('password')
testname=request.cookies.get('testname')
return password #---- 响应对象为:123456 ----
# return testname #---- 响应对象为:lisi ----

 

设置cookie作用域

Cookie默认只能在主域名下使用,如果想要在子域名(蓝图页面)下也能使用Cookie,我们需要在子域名下调用主域名的Cookie,设置子域名的方法见上文;
主域名文件下设置cookie:

from flask import Flask,Response
import admin

app = Flask(__name__)

# 配置`SERVER_NAME`,设置主域名
app.config['SERVER_NAME'] = 'example.com:5000'
# 注册蓝图,指定了subdomain
app.register_blueprint(admin.bp)

# @app.route('/index')
# def index():
# return '通过域名访问!'

@app.route('/')
def set_cookie():
resp = Response("设置Cookie!")
# domain设置为 .example.com 是允许 example.com 域名下的各子域名使用该cookie
resp.set_cookie("username", "zhangsan",domain='.example.com')
return resp

if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True)

 

  • 子域名文件下调用主域名的cookie:

from flask import Blueprint,request
bp = Blueprint('admin',__name__,subdomain='admin')

# @bp.route('/ad')
# def admin():
# return 'Admin Page'

@bp.route('/')
def get_cookie():
username = request.cookies.get('username')
# 如果前一个对象为None,则将后一个对象作为响应
return username or '没有获取到name值'

 

标签:__,resp,域名,cookie,设置,使用,Cookie
From: https://www.cnblogs.com/believeadream/p/18151373

相关文章

  • wps使用FileDialog(msoFileDialogFolderPicker)问题解决
    在vba里面使用了WithApplication.FileDialog(msoFileDialogFolderPicker),在excel里面多次测试均正常,但在wps里面运行时,发现只有打开文档后第一次运行宏是正确的,之后运行就再取不到选取的单元格,不管怎么选取,.SelectedItems.Count都是0。百度搜索为什么。 找到两个帖子1、 ......
  • Spyder 5使用其他解析器
     Spyderhasreleasedversion5ofSpyderIDEanditcomeswithitsownsetofpackages.Ifyouwanttouseotherpackagesthanpre-installedpackages,followingsetofinstructionsmaybehelpfultoyou.Step-1: AddpathofPythoninstallationtoPYTHON......
  • 这个网站真的太香了!居然可以免费使用AI聊天工具和“智能AI聊天助手”项目源码!
    宝子们,在这个AI爆火的时代,你是否还在因为无法使用ChatGpt而头疼?是否还在寻觅一款国内的好用AI工具呢?好消息!小编花费三个月终于找到了一个可以免费使用AI聊天工具的网站,由于这个网站之前一直在内测阶段,所以就没有给大家分享。刚好,近期这个网站正式上线了。小编今天就来好好跟大......
  • 使用nssm在windows服务器上部署nodejs
    在Linux上,可以轻松的使用forever或者pm2来部署nodejs应用。但是在windows下就麻烦了,pm2明确的说支持Linux&MacOS,forever在windows下貌似问题多多:  另外还有一个选择就是iisnode,这个有空研究一下,今天先说下比较简单的nssm。nssm会监控你安装的node服务,如果node挂了,nssm会......
  • SLS 查询新范式:使用 SPL 对日志进行交互式探索
    作者:无哲引言在构建现代数据和业务系统的过程中,可观测性已经变得至关重要,日志服务(SLS)为Log/Trace/Metric数据提供了大规模、低成本、高性能的一站式平台服务,并提供数据采集、加工、投递、分析、告警、可视化等功能,从而全面提升企业在研发、运维、运营和安全等各种场景的数字化......
  • fiber使用websocket--多进程版本
    多进程数据是隔离的,也就是说处理不好,不同的用户登录,其实不在一个进程,没办法直接通信解决办法:定义一个全局变量,所有进程公用,要加锁如果是单进程版本其实就跟gin框架那些一样了多线程+channel不存在数据隔离的问题main.gopackagemainimport( "flag" "fmt" "log" "sync"......
  • 为何3D动画工作室偏爱使用在线渲染农场?
    随着市场需求的不断增长和生产挑战的加剧,3D动画工作室面临着前所未有的压力。为了有效应对这些挑战,众多工作室选择了使用网络渲染农场。这种选择使他们能够借助网络渲染农场的强大渲染能力和高度灵活的资源配置,以此优化他们的工作流程,削减成本并缩短制作时间。 一、网络渲染农......
  • AList基础使用
    AList是一个支持多种存储的文件列表程序,跨平台,开源免费。官网:[https://alist.nn.ci/zh/]开源地址:[https://github.com/alist-org/alist]alist支持挂载本地存储器和一些云盘(谷歌、百度、阿里云盘等),本教程在Ubuntu中,使用alist挂载本地存储器,作为一个局域网nas使用。alist可以......
  • 使用命令行 Windows 修改文件权限
    向文件添加管理员组和系统组的完全访问权限(F)icacls<file>/inheritance:r/grant"Administrators:F"/grant"SYSTEM:F"将<file>替换为你的文件名向文件添加指定用户(组)的完全访问权限(F)首先查询该用户的SID:$Get-LocalUser|Select-ObjectName,SIDName......
  • 使用pyppeteer 下载chromium 报错 python pyppeteer 调用谷歌翻译api
    https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots/Win_x64/手动下载安装包 修改文件C:\Users\luyan\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyppeteer\chromium_downloader.py #修改这段代码defdownload_chromium()-......