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

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

"use strict";

var express = require("express");
var cookieParser = require("cookie-parser");
var 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();

控制台输出结果为:

Cookies: { Hm_lvt_2edaee7dab677cdec491683758d1e378: '1552046206,1552134942,1552485731',
Hm_lpvt_2edaee7dab677cdec491683758d1e378: '',
add: [ null, null, null, null, null, null, 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[  ].trim() ] = ( parts[  ] || '' ).trim();

    });

    console.log(Cookies)

    // 向客户端设置一个Cookie

    res.writeHead(, {

        'Set-Cookie': 'myCookie=test',

        'Content-Type': 'text/plain'

    });

    res.end('Hello World\n');

}).listen();

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

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

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

const express = require('express');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session'); var app = express(); app.use(cookieParser()); //cookieSession 必须放在cookieParser后面
app.use(cookieSession({
//session的秘钥,防止session劫持。 这个秘钥会被循环使用,秘钥越长,数量越多,破解难度越高。
keys: ['aaa', 'bbb', 'ccc'],
//session过期时间,不易太长。php默认20分钟
maxAge: *,
//可以改变浏览器cookie的名字
name: 'session'
})); app.use('/', function (req, res) { //假设使用count记录用户访问的次数
if(req.session['count'] == null) {
req.session['count'] = ;
}else{
req.session['count']++;
}
console.log(req.session['count'])
res.send('ok')
})
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. K8S 基本操作

    上一篇文章中,我们一创建了一个简单的 K8S 集群,https://www.cnblogs.com/klvchen/p/9553499.html 这里我们开始使用 kubectl 命令来创建应用,下面 ...

  2. BZOJ2946 [Poi2000]公共串(后缀自动机)

    Description          给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l        读入单词 l        计算最长公共子串的长度 l        输 ...

  3. 洛谷P3199 [HNOI2009]最小圈(01分数规划)

    题意 题目链接 Sol 暴力01分数规划可过 标算应该是这个 #include<bits/stdc++.h> #define Pair pair<int, double> #d ...

  4. 【代码笔记】Web-JavaScript-JavaScript 条件语句

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  5. iOS----------SVN问题 the operation could not be completed

    可能是服务器磁盘满了或者你本地的内存满了

  6. Android EditText手机号格式化输入XXX-XXXX-XXXX

    先来效果图: 设置手机格式化操作只需要设置EditText的addTextChangedListener的监听,下面看代码 /*editText输入监听*/ et_activity_up_login_ ...

  7. Python高级特性:迭代

    迭代的目的是实现遍历出一个可迭代对象的元素,即for循环 基本语法 : for ... in ... 首先只有可迭代对象才可以迭代,判断一个对象是不是可以迭代的方法如下: >>> f ...

  8. 「破解」Xposed强

    「破解」Xposed强 Hook Hook Hook! 两张图片,第一张是我的微信截图,第二张是我从微信Hook出的一些类名. 一段代码,Hook这些类名出来的源码. 知道这些我们能干嘛,当然是分析( ...

  9. 【最新】Android使用jenkins全自动构建打包-Windows版本(Android,Jenkins,360加固,Email,QRcode,参数构建,蒲公英)

    Android打包喝咖啡系列(Windows版) 这篇博客主要讲述的内容: 1.windows上部署Jenkins https://jenkins.io 2.基于SVN或Git https://git ...

  10. Linux/Unix 中 wheel 组的来源

    使用过 Linux/Unix 的朋友应该知道,将用户添加都 wheel用户组,让用户可以通过在命令在前加 sudo 临时获取 root 用户的权限.但是有没有朋友会想知道为何这个用户组要交 wheel ...