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 签名

 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‘, ‘liwen‘, {signed: true, maxAge: 3600})
20
21     //有没有签名的cookie,获取方式不一样。
22     console.log(‘无签名‘, req.cookies);
23     console.log(‘带签名‘,req.signedCookies);
24     res.send(‘ok‘)
25 })
26 app.listen(8080);

打开浏览器的Application 可以看到签名后的cookie,签名后的cookie, 我们可以直接在字符串上看到原文(liwen)。可用encodeComponent() 解码。  签名的作用是让服务端知道cookie有没有被修改。并不能做到加密。 而有中间件可以做到加密: cookie-encrypter  不过加密cookie,没有意义,破解只是时间问题,重要的东西还是往session放比较好。

session

session和基于cookie的。 存在于服务器,相对cookie安全,但session也存在session劫持的风险, 所以需要一串很长很多的秘钥数组来增加破解的难度。同时设置manAge过期时间, 减少留给坏人破解时间。

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

浏览器中可以看到,服务器通过respond的set-cookie返回cookie

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

时间: 2024-10-08 23:55:18

node学习之cookie和session的相关文章

Node中的Cookie和Session

1.Cookie HTTP是无状态协议.例:打开一个域名的首页,进而打开该域名的其他页面,服务器无法识别访问者.即同一浏览器访问同一网站,每次访问都没有任何关系. Cookie的原理是:客户端浏览器在第一次访问服务器后,服务器返回一段json数据进行标识,此后当客户端浏览器再次访问同一个域时,每次都携带此cookie信息. 特点 cookie是不加密的,用户可以自由看到: 用户可以删除cookie,或者禁用它,未设置失效时间,则默认关闭浏览器后失效 cookie可以被篡改 cookie可以用于攻

Node Express 操作( Cookie 和 Session )

1, Cookie 操作, 需要安装 cookie-parser 依赖 => npm i cookie-parser -D 2, 基本使用 // 引入 express let express = require('express'); let cookieParse = require('cookie-parser'); // cookie 依赖 // 创建服务器 var server = express(); server.listen(80); // 响应请求 server.use(cook

Django学习之Cookie和Session

一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除Cookie 4.Cookie版登陆校验 三.Session 1.Session的由来 2.Session流程解析 四.Django中Session操作 1.相关方法 2.Session版登陆验证 4.Django中的Session配置 一.Cookie 1.Cookie的由来 大家都知道HTTP协

会话跟踪技术--cookie和session 小结

学习过servlet的都知道,servlet是单例多线访问的,所以我们不能设置servlet成员变量来存放浏览器的访问数据.怎么解决浏览器的访问数据,让不同访问者能够访问到自己的数据呢? 相信学习完了cookie和session技术之后,读者会明白这个问题. 我们在浏览器上使用http协议在网络上传输数据的时候,服务器对于http的状态处理有两个方式,cookie和session. 笔者对于cookie设session的理解是这样的:当我们想要记录浏览器与服务器之间的交互的时候,通常的方法就是

Cookie和Session的的区别

前些天学习了Cookie和Session,我以对比的方式来简单说下两者的区别: 什么是Cookie? Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递.Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息. 什么是Session? Session一般译作会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待session,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成

【转】学习总结--Cookie & Session总结

转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理1)什么是状态管理?   将浏览器与web服务器之间多次交互过程当做一个整体来处理,并且将多次交互所涉及的数据进行管理.2)状态管理技术cookie:    a,什么是cookie?   是一种客户端(浏览器)的状态管理技术.   浏览器在访问web服务器的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这结数据保存下来:当浏览器再次访

关于《Node.js 包教不包会》中cookie 与 session的补充

刚开始学node,在看到Lesson 16: <cookie 与 session>中关于在 redis 中存储 session中,直接按照博主的代码是不能运行的,当时很苦恼,挺郁闷的,直接copy都运行不了.... 经过一顿搜索以后才知道,要安装redis! redis的安装可以参考:http://blog.fens.me/linux-redis-install/  中的 2.Redis在Linux Ubuntu中安装 (我是成功安装,并且运行) 还有关于redis的常用命令,可以看一下:ht

2014-07-09 Java Web的学习(5)-----会话管理(Cookie和Session)

1.什么是会话 会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待会话,它有着类似但不全然相同的含义.比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录.并完成购物直到关闭浏览器,这是一个会话.而在web应用的开发者开来,用户登录时我需要创建一个数据结构以存储用户的登录信息,这个结构也叫做会话.因此在谈论会话的时候要注意上下文环境.而本文谈论的是一种基于HTTP协议的用以增强web应用能力的机制或者说一种方案,它不是单指某种特定的动态页面技术,而这种能力就是保

express学习(三)—— cookie和session

express学习(三)-- cookie和session cookie存在浏览器中,最大只能保存4K数据,不安全 session存在服务器中,不能独立(先读取cookie再读取session),较安全 cookie 工具 发送cookie: 基本的东西先写好: const express = require('express'); var server=express(); // cookie server.use('/',function(req,res){ res.cookie('名字',