node学习之cookie和session
c什么是cookie
Cookie设计的初衷是 维持浏览器和服务端的状态。http是无状态的,服务端不能跟踪客户端的状态。 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏览器下一次发送请求时,会携带cookie。
而node.js 的框架express 因为保持高性能, 没有封装太多的功能,而是按需加载的形式, 引入自己需要的中间件。而cookie 常用的插件是cookie-parser
读取cookie: 需要借助cookie-parser。
//引入cookieparser 框架,读取客户端发送的cookie
const express = require('express');
const cookieParase = require('cookie-parser'); var app = express();
//这点很重要,如果没有,下面的req.cookies 会返回undefined
app.use(cookieParase()); app.use('/', function (req,res) {
res.cookie('user', 'lililiwen');
console.log(req.cookies);
res.send('objkle')
}) app.listen(8080)
发送cookie, 不需要借助中间件, 可以直接用 res.cookie();
删除cookie: res.clearCookie(名字);
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', 'liwen', {signed: true, maxAge: 3600})
//有没有签名的cookie,获取方式不一样。
console.log('无签名', req.cookies);
console.log('带签名',req.signedCookies);
res.send('ok')
})
app.listen(8080);
打开浏览器的Application 可以看到签名后的cookie,签名后的cookie, 我们可以直接在字符串上看到原文(liwen)。可用encodeComponent() 解码。 签名的作用是让服务端知道cookie有没有被修改。并不能做到加密。 而有中间件可以做到加密: cookie-encrypter 不过加密cookie,没有意义,破解只是时间问题,重要的东西还是往session放比较好。

session
session和基于cookie的。 存在于服务器,相对cookie安全,但session也存在session劫持的风险, 所以需要一串很长很多的秘钥数组来增加破解的难度。同时设置manAge过期时间, 减少留给坏人破解时间。
node中有的中间件 是cookie-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: 60*60,
//可以改变浏览器cookie的名字
name: 'session'
}));
app.use('/', function (req, res) {
//假设使用count记录用户访问的次数
if(req.session['count'] == null) {
req.session['count'] = 1;
}else{
req.session['count']++;
}
console.log(req.session['count'])
res.send('ok')
})
app.listen(8080)
//删除 delete req.session
浏览器中可以看到,服务器通过respond的set-cookie返回cookie

session是返回的cookie ID, session.sig 是session签名,作用是知道session是否被修改过

node学习之cookie和session的更多相关文章
- Node中的Cookie和Session
1.Cookie HTTP是无状态协议.例:打开一个域名的首页,进而打开该域名的其他页面,服务器无法识别访问者.即同一浏览器访问同一网站,每次访问都没有任何关系. Cookie的原理是:客户端浏览器在 ...
- PHP学习10——Cookie和Session技术
主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- nodeJs学习-08 cookie、session
http-无状态的:两次访问之间,无区别,cookie可解决 cookie:在浏览器保存一些数据,每次请求都会带过来: 弊端:可以查看修改,并不安全.大小有限(4K) 读取--cookie-parse ...
- Django 学习之cookie与session
一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...
- java学习之Cookie与Session
0x00前言 1.会话:一次会话中包含了多次请求和响应 2.功能:一次会话的范围内的多次请求间,共享数据 3.方式: (1)客户端会话技术:cookie (2)服务端会话技术:Session 0x01 ...
- node.js之Cookie
最近还是用node.js比较多,今天正好遇见一个问题,还是关于Cookie. node.js中如何实现cookie(以express框架为例): "use strict"; var ...
- express学习(三)—— cookie和session
express学习(三)-- cookie和session cookie存在浏览器中,最大只能保存4K数据,不安全 session存在服务器中,不能独立(先读取cookie再读取session),较安 ...
- Cookie和Session在Node.JS中的实践(三)
Cookie和Session在Node.JS中的实践(三) 前面作者写的COOKIE篇.SESSION篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...
随机推荐
- 百度api查询多个地址的经纬度的问题
在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬 ...
- 10.C++-构造函数初始化列表、类const成员、对象构造顺序、析构函数
首先回忆下,以前学的const 单独使用const修饰变量时,是定义的常量,比如:const int i=1; 使用volatile const修饰变量时,定义的是只读变量 使用const & ...
- Android开发——adb连接夜神模拟器
夜神模拟器安装完之后,打开模拟器,在cmd命令行中进入到夜神模拟器的bin目录 本来以为不支持中文的,没想到确实支持的哈哈 之后输入adb connect 就能成功连接上了 PS:在Android S ...
- 使用Maven搭建JFinal环境
使用Maven搭建JFinal环境 工具:IDEA 2017 JFinal版本:3.4 一.Maven项目创建 选择maven模板进行创建 填写GroupId和ArtifactId 一路Next即可 ...
- 【Tomcat】Tomcat日志切割
下载并解压缩 cronolog # tar zxvf cronolog-1.6.2.tar.gz 2.进入cronolog安装文件所在目录 # cd cronolog-1.6.2 3.运行安装 # ...
- Shaping Regions(dfs)
Shaping Regions Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 124 Solved: 39[Submit][Status][Web B ...
- git常用命令以及如何与fork别人的仓库保持同步
简单常用命令1.git status查看当前仓库是否有文件改动a:提示Your branch is up-to-date with 'origin/master'.nothing to commit, ...
- HDU3987(最小割最少割边)
Harry Potter and the Forbidden Forest Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/ ...
- php curl中x-www-form-urlencoded与multipart/form-data 方式 Post 提交数据详解
multipart/form-data 方式 post的curl库,模拟post提交的时候,默认的方式 multipart/form-data ,这个算是post提交的几个基础的实现方式. $post ...
- 开源IDE code blocks黑色主题
操作系统:Fedora26 IDE版本: Code Blocks16.01 配置文件路径为: ~/.config/codeblocks 而不像一些教程写的在用户根目录下或者在软件安装目录 请将de ...