node.js之Cookie
最近还是用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的更多相关文章
- node.js获取cookie
node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').fo ...
- node.js操作Cookie
node.js操作Cookie http://www.tuicool.com/articles/F3UF7n
- Cookie和Session在Node.JS中的实践(一)
Cookie和Session在Node.JS中的实践(一) Cookie和Session是一个非常有趣的概念,也是一个老生常谈的话题.然而,作者看了许多文章,也翻看了几本书籍,它们对Cookie和Se ...
- 在node.js中使用COOKIE
node.js中如何向客户端发送COOKIE呢?有如下两个方案: 一.使用response.writeHead,代码示例: //设置过期时间为一分钟 var today = new Date(); v ...
- node.js平台下Express的session与cookie模块包的配置
首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等. npm install express-session --save-dev cookie模块包:用于解析cookie. ...
- node.js平台下,利用cookie实现记住密码登陆(Express+Ejs+Mysql)
本博文需有node.js+express+mysql入门基础,若基础薄弱,可参考博主的其他几篇node.就是博文: 1.下载Mysql数据库,安装并配置 创建用户表供登录使用: 2.node.js平台 ...
- Node.js Cookie管理
Cookie 管理 我们可以使用中间件向 Node.js 服务器发送 cookie 信息,以下代码输出了客户端发送的 cookie 信息: var express=require('express') ...
- Node.js开发入门—使用cookie保持登录
这次来做一个站点登录的小样例,后面会用到. 这个演示样例会用到Cookie.HTML表单.POST数据体(body)解析. 第一个版本号,我们的用户数据就写死在js文件中. 第二个版本号会引入Mong ...
- Cookie和Session在Node.JS中的实践(三)
Cookie和Session在Node.JS中的实践(三) 前面作者写的COOKIE篇.SESSION篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...
随机推荐
- html之多行文本textarea 及下拉框select(12)
1.多行文本 多行文本使用textarea标签,默认值需要写在中间,和input标签不同,name属性用于后台获取数据(request.POST.get(meno)) <body> < ...
- JavaScript面向对象编程指南(六) 继承
第6章 继承 6.1 原型链 6.1.1原型链示例 原型链法:Child.prototype=new Parent(); <script> function Shape(){ this.n ...
- Activity切换的时候生命周期的变化
之前在做笔试题的时候遇到一个问题:Activity A切换到ActivityB时,A和B的生命周期变化. 事实上,它们的生命周期变化是这样的: 1.A的onPause()方法被执行. 2.B的onCr ...
- 转载:如何在Ubuntu 18.04上使用UFW设置防火墙
https://blog.csdn.net/u013068789/article/details/82051943 介绍 UFW或Uncomplicated Firewall是iptables一个接口 ...
- 深圳共创力“研发管理&知识管理”高端研讨交流会在深圳举办!
2017/4/8,由深圳市共创力企业管理咨询公司举办的“研发管理&知识管理”高端研讨会在深圳市南山区圣淘沙国际酒店(翡翠店)隆重召开.此次研讨会由共创力总经理.首席顾问杨学明先生主持.研讨会先 ...
- 使用 pjsip 代码独立开发
1.在不改动pjsip代码的情况下,和pjsip工程目录并行建立win32控制台程序工程P2PTraversal 目录结构如下: . ├── pjproject-2.6 └── pjsipdemo 2 ...
- javascript语言之 this概念
转载 猫猫小屋 http://www.maomao365.com/?p=837 由于javascript是一种解释性语言,运行时才会解释所有的变量值,所以对于javascript中this所指的对象是 ...
- SQL SERVER数据库级的触发器
CREATE TRIGGER [Object_Change_Trigger_DDL] ON database FOR DROP_TABLE AS DECLARE @EventData AS xml; ...
- Zabbix WMI监控
检查Windows OS是否激活,5表示处于通知模式,1表示已激活 wmi.get[root\cimv2,select LicenseStatus FROM SoftwareLicensingProd ...
- es6的正则扩展笔记之修饰符
es6对于正则表达式添加了 u 修饰符和 y 修饰符. u 修饰符:含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符. 该修饰符不光会正确处理正则表达式,还会正确处 ...