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篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...
随机推荐
- Python 字符串拼接 sql ,造成 sql 注入例子
简单的 userinfo 表 字符串拼接 sql import pymysql # 测试环境的数据库连接 conn = pymysql.connect(host='192.168.0.214', po ...
- apache配置-html碎片shtml格式
修改SSI 文件 conf–httpd.conf <Directory "D:/Android/Apache2.2/htdocs"> //修改文件目录 # # Pos ...
- C#基础(203)实例方法和重载方法总结,构造方法与实例方法总结,this关键字
c#方法的重载:分为实例方法重载和静态方法重载俩种 1.实例方法重载的调用特点 首先写三个Add方法和三个Sub方法 public int Add(int a,int b) { return a + ...
- echarts功能配置实例----柱/折线、饼图
---恢复内容开始--- echarts中的柱状图和折线图的参数配置可以共用,一般只需要修改图表类型这一个参数即可. 一.echarts最简单的实例 1.折线图/柱状图 <html> &l ...
- [vue三部曲]第一部:vue脚手架的搭建和目录资源介绍,超详细!
第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装1.2 如果本机已经安装node的运行换,请更新至最新的node 版本下载地址:https://nod ...
- maven 术语
1, 中央仓库 是一个网络仓库, 用于存储各种 jar 和 maven 插件, 官方网站显示的是列表, 不友好, 一般搜索依赖到一个三方地址: https://mvnrepository.com/ 2 ...
- RabbitMQ 环境搭建
安装基础环境 yum install net-tools yum install yum yum install gcc glibc-devel make ncurses-devel openssl- ...
- Android为TV端助力 双缓存机制
废话不多说,直接贴代码! 所谓的双缓存,第一就是缓存在内存里面,第二就是缓存在SD卡里面,当你需要加载数据时,先去内存缓存中查找,如果没有再去SD卡中查找,并且用户可以自选使用哪种缓存! 缓存内存和缓 ...
- 轻松搭建Xposed Hook
0x2.导入xposed库文件XposedBridgeApi-XX.jar,将库文件放在app/lib目录下,自己创建一个lib目录,别放在libs目录下,否则会出错,然后导入库,修改 Scope 为 ...
- oracle中print_table存储过程介绍
一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面.但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print_t ...