下面讲的都是基Express及相关的包。所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包。
先简单说一下,如何用Express搭建一个服务器环境。如下:
const express=require("express");//引用express var server=express();//创建服务器 server.listen(8090);//监听服务器
就是这么简单三句即可。
在说cookie, session 之前,先了解一下这2个东西的基本特性:
cookie:
1.保存在浏览器端,每次请求都会带过来;
2.不安全、大小有限(4K)。
session:
1.保存在服务器端;
2.安全、理论上是无限的;
3.基于cookie实现的。
对于这2个东西的操作,无非就是发送,读取,写入,删除这几种操作。
先讲一下cookie:
1.发送:
const express=require("express"); var server=express(); server.listen(8090); //发送cookie server.use('/www/test.html',function(req,res){ res.cookie('user','test',{path:'/www',maxAge:30*24*3600*1000}); res.send('ok'); })
运行这个js,可以看到浏览器里面的cookie如下图:
2.读取cookie,如果需要用到签名功能,需要引用cookie-parser模块:
const express = require("express"); const cookieParser = require("cookie-parser"); var server = express(); server.use(cookieParser("adtq563fgkj452ag")); //先写入,再读取,secret表示cookie签名,可以防止别人篡改你的cookie server.use('/', function (req, res) { req.secret = 'adtq563fgkj452ag'; //如果上面在cookieParser传入了签名,这句话可以不写 res.cookie('user', 'sese', { signed: true //表示该cookie需要签名 }); console.log('签名的cookie:', req.signedCookies); //读取签名的cookie console.log('无签名的cookie:', req.cookies); //读取没签名的cookie res.send('ok'); }); server.listen(8090);
执行该JS,结果如下图:
服务器端返回的结果:
3.删除cookie,语句为clearCookie():
const express = require("express"); const cookieParser = require("cookie-parser"); var server = express(); //删除cookie server.use('/', function (req, res) { res.clearCookie('user'); res.send('ok'); }); server.listen(8090);
-------------------------我是存在感十足的分割线-------------------------
现在讲一下sessoion。
1.写入session,需要引用cookie-session模块 :
const express = require("express"); const cookieParser = require("cookie-parser"); const cookieSession = require("cookie-session"); var server = express(); //生成session的密钥数组 var arr=[]; for(var i=0;i<10000;i++){ arr.push('sig_'+Math.random()); } server.use(cookieParser()); server.use(cookieSession({ name:'sess', keys:arr // 密钥 })); server.use('/', function (req, res) { res.send('ok'); }); server.listen(8090);
执行上面代码,显示结果如下 :
2.删除session,语句为delete req.session[name],即为:
server.use('/', function (req, res) { delete req.session['sess']; res.send('ok'); });
大家可以亲自测试上面的例子~