当前位置:网站首页>cookie和session在实际项目中的使用
cookie和session在实际项目中的使用
2022-07-17 10:10:00 【小飞侠Pan】
cookie
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const testRouter = new Router();
// 登录接口
testRouter.get('/test', (ctx, next) => {
// maxAge对应毫秒,存储cookie是 key-value形式
ctx.cookies.set("name", "lilei", {
maxAge: 500 * 1000
})
ctx.body = "test";
});
testRouter.get('/demo', (ctx, next) => {
// 读取cookie
const value = ctx.cookies.get('name');
ctx.body = "你的cookie是" + value;
});
app.use(testRouter.routes());
app.use(testRouter.allowedMethods());
app.listen(8080, () => {
console.log("服务器启动成功~");
})
- cookie设置的其实是明文,所以会有安全问题
- 当已经存了cookie,再次访问网站时,会将cookie发送到服务器端,服务器端会拿出cookie进行验证,所以我们可以将cookie拿出来验证
session
const Koa = require('koa');
const Router = require('koa-router');
const Session = require('koa-session');
const app = new Koa();
const testRouter = new Router();
// 创建Session的配置
const session = Session({
key: 'sessionid',
maxAge: 10 * 1000,
signed: true, // 是否使用加密签名
}, app);
app.keys = ["aaaa"];// 这里是要使用的加密签名,这个签名是放在服务器端的
app.use(session);
// 登录接口
testRouter.get('/test', (ctx, next) => {
// name/password -> id/name
const id = 110;
const name = "coderwhy";
// 添加一个session,执行下面的语句时客户端已经存储了一个session
// session本质上就是一个cookie,所以存储在cookie中,并且name为sessionid,是因为我们上面设置的name是sessionid
//对应value值是:将信息使用base64编码生成
ctx.session.user = {
id, name};
ctx.body = "test";
});
testRouter.get('/demo', (ctx, next) => {
// 使用session时,客户端将session发送到服务器端,并且在服务器端会解码,我们可以在服务器端打印出存储的信息
console.log(ctx.session.user);
ctx.body = 'demo';
});
app.use(testRouter.routes());
app.use(testRouter.allowedMethods());
app.listen(8080, () => {
console.log("服务器启动成功~");
})
session 本质上也是一个cookie,只不过是存储在浏览器上的session一般存在于cookie中,并且是一个sessionId,sessionId通过要保存的信息加上签名来加密生成,所以在客户端查看的session是一个字符串
当我们把cookie传递到服务器端时,里面的sessionId也会被传过去,然后服务器端拿出sessionId,利用加密算法进行解密,拿到信息进行验证
边栏推荐
猜你喜欢

DuiLib 实现tooltip自定义鼠标提示窗口

Microservice splitting for stand-alone projects

ETCD数据库源码分析——etcdserver bootstrap从快照中恢复store

Uniapp warehouse management system source code

LabVIEW32位与64位的兼容性

SAP Fiori 的附件处理(Attachment handling)

Express
![[Hongke] Introduction to genicam protocol](/img/a5/91a1d24a47ea2e3265530778d6fc1f.png)
[Hongke] Introduction to genicam protocol

How to build your own cloud database in docker
![[Hongke] lidar safety system: making the world safer](/img/35/23986a66c63d51862c7562834d6a89.png)
[Hongke] lidar safety system: making the world safer
随机推荐
MySQL user management
Google Play应用商店可能会删除应用权限概述 转而使用新的数据安全信息组合
un7.16:如何在码云上部署项目并邀请组员?
DEDECMS织梦文章列表标题重复显示解决方案
Express
Simple third-party component log desensitization
Etcd database source code analysis - initialize etcdserver structure
微信小程序调用API简单案例
Day 6 training
Binary installation MySQL initialization password problem
力扣(LeetCode)197. 上升的温度(2022.07.16)
开发实用工具
Resolve the applicationeventmulticast not initialized - call 'refresh' before multicast events exception
Left connection query of Android database
解决接口跨域问题和node操作MySQL
焱融科技入选北京市 2022 年度“专精特新”,领航混合云文件存储
DEDECMS织梦保存当前栏目更改时失败的解决方法
两个结构体 ifconf 和 ifreq
[Network Research Institute] the threat of machine learning system is time to take it seriously
C语言基础篇 —— 2-3 指针与数组