最近还是用node.js比较多,今天正好遇见一个问题,还是关于Cookie。

node.js中如何实现cookie(以express框架为例):

  1. "use strict";
  2.  
  3. var express = require("express");
  4. var cookieParser = require("cookie-parser");
  5. var util = require("util");
  6.  
  7. var app = express();
  8. app.use(cookieParser());
  9.  
  10. app.get("/test",function (req, res) {
  11. console.log("Cookies: " + util.inspect(req.cookies));
  12.  
  13. res.send("cookie");
  14.  
  15. });
  16.  
  17. app.listen();

控制台输出结果为:

  1. Cookies: { Hm_lvt_2edaee7dab677cdec491683758d1e378: '1552046206,1552134942,1552485731',
  2. Hm_lpvt_2edaee7dab677cdec491683758d1e378: '',
  3. add: [ null, null, null, null, null, null, null ] }

如果不使用express的话,那么原生node.js是如何实现的呢?代码如下:

  1. var http = require('http');
  2.  
  3. http.createServer(function (req, res) {
  4.  
  5. // 获得客户端的Cookie
  6.  
  7. var Cookies = {};
  8.  
  9. req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) {
  10.  
  11. var parts = Cookie.split('=');
  12.  
  13. Cookies[ parts[ ].trim() ] = ( parts[ ] || '' ).trim();
  14.  
  15. });
  16.  
  17. console.log(Cookies)
  18.  
  19. // 向客户端设置一个Cookie
  20.  
  21. res.writeHead(, {
  22.  
  23. 'Set-Cookie': 'myCookie=test',
  24.  
  25. 'Content-Type': 'text/plain'
  26.  
  27. });
  28.  
  29. res.end('Hello World\n');
  30.  
  31. }).listen();

cookie并不是万能的,相反它有一定的安全隐患,为此node.js有一种cookie签名实现,源码如下:

  1. const express = require('express');
  2. const cookieParser = require('cookie-parser');
  3.  
  4. //随机生成的字符串
  5. var signStr = 'xadsafeowirw'
  6.  
  7. var app = express();
  8.  
  9. //需要将密匙传给cookieParser, 在接收数据的时候,进行解析。
  10. app.use(cookieParser(signStr));
  11.  
  12. app.use('/', function (req, res) {
  13. //将密匙字符串赋值给req.secret,可以省略,在上面cookieparser()时会自动对secret赋值
  14. req.secret=signStr;
  15.  
  16. //返回给浏览器的cookie, 这就是传说中的种cookie了
  17. //如果需要开启签名,第三个参数对象signed 设置为true.
  18. //由于cookie的大小限制4k,而签名后的cookie体积会增加,所以重要的cookie才签名
  19. res.cookie('cookiename', 'youcong', {signed: true, maxAge: })
  20.  
  21. //有没有签名的cookie,获取方式不一样。
  22. console.log('无签名', req.cookies);
  23. console.log('带签名',req.signedCookies);
  24. res.send('ok')
  25. })
  26. app.listen();

顺便再补充一下node.js的session实现,代码如下:

  1. const express = require('express');
  2. const cookieParser = require('cookie-parser');
  3. const cookieSession = require('cookie-session');
  4.  
  5. var app = express();
  6.  
  7. app.use(cookieParser());
  8.  
  9. //cookieSession 必须放在cookieParser后面
  10. app.use(cookieSession({
  11. //session的秘钥,防止session劫持。 这个秘钥会被循环使用,秘钥越长,数量越多,破解难度越高。
  12. keys: ['aaa', 'bbb', 'ccc'],
  13. //session过期时间,不易太长。php默认20分钟
  14. maxAge: *,
  15. //可以改变浏览器cookie的名字
  16. name: 'session'
  17. }));
  18.  
  19. app.use('/', function (req, res) {
  20.  
  21. //假设使用count记录用户访问的次数
  22. if(req.session['count'] == null) {
  23. req.session['count'] = ;
  24. }else{
  25. req.session['count']++;
  26. }
  27. console.log(req.session['count'])
  28. res.send('ok')
  29. })
  30. app.listen()

参考资料如下:
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

node.js之Cookie的更多相关文章

  1. node.js获取cookie

    node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').fo ...

  2. node.js操作Cookie

    node.js操作Cookie http://www.tuicool.com/articles/F3UF7n

  3. Cookie和Session在Node.JS中的实践(一)

    Cookie和Session在Node.JS中的实践(一) Cookie和Session是一个非常有趣的概念,也是一个老生常谈的话题.然而,作者看了许多文章,也翻看了几本书籍,它们对Cookie和Se ...

  4. 在node.js中使用COOKIE

    node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...

  5. node.js平台下Express的session与cookie模块包的配置

    首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等. npm install express-session --save-dev cookie模块包:用于解析cookie. ...

  6. node.js平台下,利用cookie实现记住密码登陆(Express+Ejs+Mysql)

    本博文需有node.js+express+mysql入门基础,若基础薄弱,可参考博主的其他几篇node.就是博文: 1.下载Mysql数据库,安装并配置 创建用户表供登录使用: 2.node.js平台 ...

  7. Node.js Cookie管理

    Cookie 管理 我们可以使用中间件向 Node.js 服务器发送 cookie 信息,以下代码输出了客户端发送的 cookie 信息: var express=require('express') ...

  8. Node.js开发入门—使用cookie保持登录

    这次来做一个站点登录的小样例,后面会用到. 这个演示样例会用到Cookie.HTML表单.POST数据体(body)解析. 第一个版本号,我们的用户数据就写死在js文件中. 第二个版本号会引入Mong ...

  9. Cookie和Session在Node.JS中的实践(三)

    Cookie和Session在Node.JS中的实践(三) 前面作者写的COOKIE篇.SESSION篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...

随机推荐

  1. html之多行文本textarea 及下拉框select(12)

    1.多行文本 多行文本使用textarea标签,默认值需要写在中间,和input标签不同,name属性用于后台获取数据(request.POST.get(meno)) <body> < ...

  2. JavaScript面向对象编程指南(六) 继承

    第6章 继承 6.1 原型链 6.1.1原型链示例 原型链法:Child.prototype=new Parent(); <script> function Shape(){ this.n ...

  3. Activity切换的时候生命周期的变化

    之前在做笔试题的时候遇到一个问题:Activity A切换到ActivityB时,A和B的生命周期变化. 事实上,它们的生命周期变化是这样的: 1.A的onPause()方法被执行. 2.B的onCr ...

  4. 转载:如何在Ubuntu 18.04上使用UFW设置防火墙

    https://blog.csdn.net/u013068789/article/details/82051943 介绍 UFW或Uncomplicated Firewall是iptables一个接口 ...

  5. 深圳共创力“研发管理&知识管理”高端研讨交流会在深圳举办!

    2017/4/8,由深圳市共创力企业管理咨询公司举办的“研发管理&知识管理”高端研讨会在深圳市南山区圣淘沙国际酒店(翡翠店)隆重召开.此次研讨会由共创力总经理.首席顾问杨学明先生主持.研讨会先 ...

  6. 使用 pjsip 代码独立开发

    1.在不改动pjsip代码的情况下,和pjsip工程目录并行建立win32控制台程序工程P2PTraversal 目录结构如下: . ├── pjproject-2.6 └── pjsipdemo 2 ...

  7. javascript语言之 this概念

    转载 猫猫小屋 http://www.maomao365.com/?p=837 由于javascript是一种解释性语言,运行时才会解释所有的变量值,所以对于javascript中this所指的对象是 ...

  8. SQL SERVER数据库级的触发器

    CREATE TRIGGER [Object_Change_Trigger_DDL] ON database FOR DROP_TABLE AS DECLARE @EventData AS xml; ...

  9. Zabbix WMI监控

    检查Windows OS是否激活,5表示处于通知模式,1表示已激活 wmi.get[root\cimv2,select LicenseStatus FROM SoftwareLicensingProd ...

  10. es6的正则扩展笔记之修饰符

    es6对于正则表达式添加了 u 修饰符和 y 修饰符. u 修饰符:含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符.    该修饰符不光会正确处理正则表达式,还会正确处 ...