版权声明:本文为博主原创文章,喜欢的话,可以通知我后进行转载哦! https://blog.csdn.net/maidu_xbd/article/details/86645359
http无状态协议
HTTP无状态协议,是指协议对于事务处理没有记忆能力。服务器无法识别两条http请求是否是同一个用户发送的。也就是说服务器端并没有记录通信状态的能力。为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态。Cookie和Session就是解决交互存储状态的技术,
cookie:
cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中。不安全、有限(4K)
(1)发送cookie
res.cookie(名字, 值, {path: '/', maxAge: 毫秒});
const express = require('express');
var server = express();
//cookie
server.use('/aaa/index.html', function (req, res) {
//发送cookie---res.cookie(名字, 值, {path: '/', maxAge: 毫秒});
res.cookie('user', 'buding', { path: '/aaa', maxAge: 30 * 24 * 3600 * 1000 });
res.send('ok');
});
server.listen(8080);
(2)读取cookie——cookie-parser
server.use(cookieParser('密钥'));------签名
server.use(function (){
req.cookies 未签名版
req.signedCookies 签名版
});
const express = require('express');
const cookieParser = require('cookie-parser');
var server = express();
//cookie
server.use(cookieParser());
server.use('/aaa/index.html', function (req, res) {
//发送cookie---res.cookie(名字, 值, {path: '/', maxAge: 毫秒});
res.cookie('user', 'buding', { path: '/aaa', maxAge: 30 * 24 * 3600 * 1000 });
res.send('ok');
//读取cookie——需要cookie-parser
console.log(req.cookies);
});
server.listen(8080);
(3)删除cookie
res.clearCookie(名字);
const express = require('express');
const cookieParser = require('cookie-parser');
var server = express();
//cookie
server.use(cookieParser('w5frf6gbd2')); //设置签名
server.use('/', function (req, res) {
//req.secret='w5frf6gbd2'; //可不写
res.cookie('user', 'buding', { signed: true });
console.log('签名cookie:', req.signedCookies)
console.log('未签名cookie:', req.cookies);
res.clearCookie('user'); //删除cookie
res.send('ok');
});
server.listen(8080);
(4)cookie-encrypter----加密
session:
Session是基于cookie实现的,cookie中会有一个session的ID,服务器利用sessionid找到session文件。Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。安全、无限
隐患:session劫持
const express = require('express');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
var server = express();
//cookie
var arr = [];
for (var i = 0; i < 100000; i++) {
arr.push('sig_' + Math.random());
}
server.use(cookieParser());
server.use(cookieSession({
name: 'buding',
keys: arr,
maxAge: 2 * 3600 * 1000
}));
//读取session ---- req.session
server.use('/', function (req, res) {
if (req.session['count'] == null) {
req.session['count'] = 1;
} else {
req.session['count']++;
}
console.log(req.session['count']);
res.send('ok');
});
server.listen(8080);