node.js中cookie和session的区别和用法

cookie和session都是用来跟踪客户端用户身份的方式。它们为多页的web提供了很大的便利,让服务端清楚的识别到不同的用户,但他们也有一定的区别。

区别: cookie数据保存在客户端,session数据保存在服务端。

下面具体说说它们各自的含义:

cookie

位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。我们可以在浏览器上保存任何文本,而且我们还可以随时随地的去阻止它或者删除。我们同样也可以禁用或者编辑cookie,但是有一点需要注意不要使用cookie来存储一些隐私数据,以防隐私泄露,因为在浏览器上,用户是可以进行修改cookie的值的。

session

session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站

cookie和session的使用

cookie

  1. 安装cookie-parser第三方cookie操作模块
 npm install cookie-parser -S
  1. 引入
const cookieParser = require('cookie-parser');
app.use(cookieParser('123456')); //使用cookie中间件,传入签名123456进行加密
  1. 设置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

  1. 安装模块
cnpm install express-session
  1. 引入
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}}));
  1. 使用
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来保存信息,要不然每次登陆都特别麻烦,如果对于需要安全性高的站点以及控制数据的能力时需要用会话效果更佳,当然我们也可以结合两者,使网站按照我们的想法进行运行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旁观者lgp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值