node.js中cookie和session的区别和用法
cookie和session都是用来跟踪客户端用户身份的方式。它们为多页的web提供了很大的便利,让服务端清楚的识别到不同的用户,但他们也有一定的区别。
区别: cookie数据保存在客户端,session数据保存在服务端。
下面具体说说它们各自的含义:
cookie
位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。我们可以在浏览器上保存任何文本,而且我们还可以随时随地的去阻止它或者删除。我们同样也可以禁用或者编辑cookie,但是有一点需要注意不要使用cookie来存储一些隐私数据,以防隐私泄露,因为在浏览器上,用户是可以进行修改cookie的值的。
session
session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站
cookie和session的使用
cookie
安装cookie-parser第三方cookie操作模块
npm install cookie-parser -S
引入
const cookieParser = require(‘cookie-parser’);
app.use(cookieParser(‘123456’)); //使用cookie中间件,传入签名123456进行加密设置cookie,需要设置signed签名
res.cookies(‘key’,’value’,option)
key:键名
value:值
其中option要求是要json格式:有以下选项
domain: 域名。设置子域名(二级域名)是否可以访问cookie。 例:domain:’.主域名’ name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样
expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT
maxAge: 最大失效时间(毫秒),设置在多少后失效
secure: 当 secure 值为 true 时, cookie 在 HTTP 中是无效,在 HTTPS 中才有效
path: 表示 cookie 影响到的路由,如 path=/。如果路径不能匹配时,浏览器则不发送这个 Cookie
httpOnly:默认为false,建议设置为true, 客户端将无法通过document.cookie读取到 COOKIE 信息,可防止 XSS 攻击产生
signed: 表示是否签名(加密) cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedCookies 访问它,前提需要设置上面中间件app.use传参 。未签名则用 res.cookies 访问
被篡改的签名 cookie 会被服务器拒绝,并且 cookie值会重置为它的原始值
//导入express框架
var express = require('express');
//导入cookie模块
var cookie = require('cookie-parser');
var app = express();
app.use(cookie());
app.get("/setcookie",function(req,res,next){
//设置cookie
res.cookie('name','mike', { maxAge:60*000}); //一分钟后cookie的值将失效
res.send('');
})
/* * 使用sign对cookie进行加密 * 1、参数表示加密的随机字符串 * app.use(cookieParser('sign'); * 2、设置 * res.cookie('userinfo','cookie222_info',{maxAge:50000,signed:true}) signed值为true时对cookie进行加密 * 3、获取加密的cookie * req.signedCookies * */
/** 1. 获取cookie */
app.get("/getcookie",function(req,res){
var name = req.cookies.name; //获取到cookie的值并存入name变量中
res.send(name);
})
/** 2. 删除cookie */
app.get("/delete",function(req,res){
res.clearCookie("name"); //将cookie的值删除
res.send('');
})
app.listen('3000');
session
安装模块
cnpm install express-session
引入
var express = require(‘express’);
var session = require(‘express-session’);
var app = express();app.use(session({ secret: ‘keyboard cat’, resave: false, saveUninitialized: true, cookie: { maxAge: 60000}}));
使用
router.get(‘/set’, function (req, res, next) {
//设置session
req.session.username = 'zhangsan';
res.send('ok');
});
router.get(‘/get’, function (req, res, next) {//获取session
console.log(req.session);
console.log(req.session.username);
res.send('session的值:‘+req.session);
});
注意:session仅存在于当前会话之中,连接一断,session消失
总结:如果我们需要经常登录一个站点时,最好用cookie来保存信息,要不然每次登陆都特别麻烦,如果对于需要安全性高的站点以及控制数据的能力时需要用会话效果更佳,当然我们也可以结合两者,使网站按照我们的想法进行运行
还没有评论,来说两句吧...