木灵鱼儿
阅读:1595
Express框架 cookie session
cookie大小有限制,并且每次浏览器请求都会将cookie发送给服务器,为此,服务器本身有一个session存储,这个session可以理解为无限大小,只要服务器有空间,就可以存。
基本流程:
浏览器发出请求(空的cookie)
|
|
|
服务器接收,创建session,返回一个带session id的cookie给浏览器
|
|
|
浏览器接收到cookie,每次都会发送这个带id的cookie从而形成用户认证这种效果
session基于cookie
cookie
服务器发送cookie
const express = require("express");
var server = express();
server.listen(8080);
server.use('/', (req, res) => {
res.cookie('user', 'zhangsan', { path: "/", maxAge: 30 * 24 * 3600 * 1000 });
res.send("ok");
});
res.cookie由服务器向浏览器发送一个cookie,里面有key和value,还有一个对象参数。
读取cookie
安装中间件:cookie-parser
npm install cookie-parser
const express = require("express");
const cookieParser = require("cookie-parser");
var server = express();
server.listen(8080);
server.use(cookieParser());
server.use('/', (req, res) => {
console.log(req.cookies);
res.send("ok");
});
签名
利用签名可以判断这个cookie是否被修改过。并不是加密。
签名之前我们需要创建一个后端能使用的签名字符串,用于签名生成,并且后端创建cookie时还要启用{signed:true}
签名参数。
加密后的cookie无法通过req.cookies
获取,要使用req.signeCookies
来获取签名的cookie
const express = require("express");
const cookieParser = require("cookie-parser");
var server = express();
server.listen(8080);
server.use(cookieParser());
server.use('/', (req, res) => {
req.secret = "hsjkadhkjaqwgsda";
res.cookie('user', 'zhangsan', { signed: true });
console.log('未签名', req.cookies);
console.log('签名', req.signedCookies);
res.send("ok");
});
此时获取的签名的cookie会带有一大串签名文字,但实际上我们要获取的只要内容就行了,不需要签名,为此需要在cookieParser中间件中将secret签名字符传入即可。
const express = require("express");
const cookieParser = require("cookie-parser");
var server = express();
server.listen(8080);
server.use(cookieParser("hsjkadhkjaqwgsda"));
server.use('/', (req, res) => {
req.secret = "hsjkadhkjaqwgsda";
res.cookie('user', 'zhangsan', { signed: true });
console.log('未签名', req.cookies);
console.log('签名', req.signedCookies);
res.send("ok");
});
由于签名会将字符串加长从而增大了cookie的大小,但是cookie只有4k的存储,所以能不用签名就不用,从而节省体积
删除cookie
const express = require("express");
const cookieParser = require("cookie-parser");
var server = express();
server.listen(8080);
server.use(cookieParser("hsjkadhkjaqwgsda"));
server.use('/', (req, res) => {
res.clearCookie("user");
res.send("ok");
});
res.clearCookie("user");
删除对应name为user的cookie。
加密
使用一个中间件cookie-encrypter
,具体要看这个插件的使用文档了。
session
session是基于cookie的,所以使用方法要写在cookie之后,使用一个cookie-session
插件。
安装
npm install cookie-session
使用
const express = require("express");
const cookieParser = require("cookie-parser");
const cookieSession = require("cookie-session");
var server = express();
server.listen(8080);
server.use(cookieParser());
server.use(cookieSession({
keys: ["asnkjdjada", "dhasjigdas", "djkashdkjas"]
}));
server.use('/', (req, res) => {
if (req.session["count"] == null) {
req.session["count"] = 1;
} else {
req.session["count"]++;
}
console.log(req.session["count"]);
res.send("ok");
});
cookieSession要在cookieParser之后使用,并且他还有一个参数,参数必填keys,也就是类似于cookie签名用的那个字符串,session会一次调用对应的字符串对session id进行加密,理论上来说,kyes数组里面的字符越多,加密效果就越好。
然后在后面我们可以进行一次统计访问次数。
session默认会给浏览器两个cookie,一个为seesion的id,一个是id的加密密匙,每次请求都会更新一次密匙,防止id被修改。
而session除了keys还有两个参数
server.use(cookieSession({
name:"csss",
keys: ["asnkjdjada", "dhasjigdas", "djkashdkjas"],
maxAge: 2*3600*1000 //两个小时
}))
name是自定义cookie-session的name属性,maxAge为有效期,一般2个小时,有效期越长越不安全。
seesion存在于服务器,通过cookie的id来读取。
删除seesion
server.use('/', (req, res) => {
if(req.session["count"]){
delete req.session["count"];
}
res.send("ok");
});
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。
相关推荐
koa框架20 cookie、session
cookiecookie用于判断用户是谁,一般都是使用签名算法进行加密。加上cookie本身大小有限制,总大小才32k,头信息也才32k,所有不能太大,而且不能太多,最多20条,容量这样一算的话,单条才4k。koa创建cookie直接通过ctx对象:ctx.cookies.set(key,value);读取:ctx.cookies.get(key);签名server.keys = ["aaaa", "bbbb", "cccc"]; router.get("/", async ctx => { ct...
koa框架7 基础入门之cookie、session
cookie 身份认证cookie的起源本身就是因为http是一种单向性的传输,服务器和浏览器之间没有联系用的东西,如服务器无法辨别正在浏览的是谁,他有vip吗?所以就想出在浏览器存一个简短的数据,每次浏览器会将这个数据发送给服务器,服务器通过这个判断这个人是谁。但是现在来说,这种方式存在了一些问题:cookie容量很小,不能超过32kb,但实际上都不能完全达到32kb,因为cookie是放在http信息的header上的,而header最大也只有32kb,他除了cookie还要存放其他信息。安全性,存放在浏览器的数据都不安全,客户端可以直接查看,修改,伪造cookie一般是由服务器s...
Express框架 数据解析
get的请求数据可以直接同request对象的query属性获取,post呢?简单点来说我们需要用到一个插件(中间件):body-parser安装npm install body-parser使用const express = require("express"); const bodyParser = require("body-parser"); var server = express(); server.listen(8080); server.use(bodyParser.urlencoded({ extended: fals...
Express框架 安装 配置 请求
安装npm install express基本使用const express = require("express"); var server = express(); server.listen(8080);处理请求const express = require("express"); var server = express(); server.use("/a.html", (req, res) => { res.send({ a: 12, b: 6 }); res.end(); }) ser...
网页换肤(cookie)
由于jq的cookie插件已经放弃维护了,其团队改为js-cookie在github上进行新的开源分享。地址为:https://github.com/js-cookie/js-cookie下载到引用的js文件后引用即可。调用方法://设置 Cookies.set(name,value,{expires: time, path: '/'}); //其中value的值支持对象的形式传入 var box = { a = 1, b = 2 } Cookies.set(name,box,{expires: time, path: '/'}); //虽然支持传入,但是调用的时候需要进行j...
