最近还是用node.js比较多,今天正好遇见一个问题,还是关于Cookie。
node.js中如何实现cookie(以express框架为例):
"use strict"; var express = require(express); var cookieParser = require(cookie-parservar util = require(util); var app = express(); app.use(cookieParser()); app.get(/test,function (req,res) { console.log(Cookies: " + util.inspect(req.cookies)); res.send(cookie); }); app.listen(8081);
控制台输出结果为:
Cookies: { Hm_lvt_2edaee7dab677cdec491683758d1e378: '1552046206,1552134942,1552485731'1552485731null,null ] }
如果不使用express的话,那么原生node.js是如何实现的呢?代码如下:
var http = require(http); http.createServer(function (req,res) { // 获得客户端的Cookie var Cookies = {}; req.headers.cookie && req.headers.cookie.split(;).forEach(function( Cookie ) { var parts = Cookie.split(=); Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim(); }); console.log(Cookies) 向客户端设置一个Cookie res.writeHead(200Set-Cookie': myCookie=testContent-Typetext/plain }); res.end(Hello World\n); }).listen(8000);
cookie并不是万能的,相反它有一定的安全隐患,为此node.js有一种cookie签名实现,源码如下:
const express = require(const cookieParser = require(); 随机生成的字符串 var signStr = xadsafeowirw' express(); 需要将密匙传给cookieParser,在接收数据的时候,进行解析。 app.use(cookieParser(signStr)); app.use(/将密匙字符串赋值给req.secret,可以省略,在上面cookieparser()时会自动对secret赋值 req.secret=signStr; 返回给浏览器的cookie,这就是传说中的种cookie了 如果需要开启签名,第三个参数对象signed 设置为true. 由于cookie的大小限制4k,而签名后的cookie体积会增加,所以重要的cookie才签名 res.cookie(cookiename',youcongtrue,maxAge: 3600}) 有没有签名的cookie,获取方式不一样。 console.log(无签名带签名ok) }) app.listen(8090);
顺便再补充一下node.js的session实现,代码如下:
const cookieSession = require(cookie-session express(); app.use(cookieParser()); cookieSession 必须放在cookieParser后面 app.use(cookieSession({ session的秘钥,防止session劫持。 这个秘钥会被循环使用,秘钥越长,数量越多,破解难度越高。 keys: [aaabbbccc],session过期时间,不易太长。php默认20分钟 maxAge: 60*60可以改变浏览器cookie的名字 name: session })); app.use(假设使用count记录用户访问的次数 if(req.session[count'] == null) { req.session['] = 1; }else{ req.session[']++; } console.log(req.session[]) res.send(8090)
参考资料如下:
node.js操作Cookie,让你清楚了解cookie存入过程:https://blog.csdn.net/sinat_18474835/article/details/79987282
Node.js学习(15)-Cookie:https://blog.csdn.net/sunhuansheng/article/details/82356129
node学习之cookie和session:https://www.cnblogs.com/lijinwen/p/7898159.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。