node学习之cookie和session

进击的前端狗 进击的前端狗     2022-10-02     742

关键词:

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是否被修改过

 

 

java学习之文件io流篇

Cookie 什么是Cookie?cookie存在的原由和cookie常识原由常识cookie的创建、读取、修改、删除创建读取修改删除cookie字符串cookie域和路径cookie实现域之间的访问cookie封装   什么是Cookie? cookie存在的原由和cookie常识原由H... 查看详情

express学习之session

最新版本的express没有包含session依赖项,需要我们自己配置并安装。安装方法:npminstallexpress-session使用:varsession=require(‘express-session‘);      varapp=express();      a 查看详情

django学习之jwt

...所有系统中得到授权而无需再次登录。 单系统登录(session)认证和单点(token)认证 session认证我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那... 查看详情

node.js学习之(第二章:exports和module.exports)(代码片段)

前言Node中,每个模块都有一个exports接口对象,我们需要把公共的方法或者字符串挂载在这个接口对象中,其他的模块才可以使用。Node.js中只有模块作用域,默认两个模块之间的变量,方法互不冲突,互不影响,这样就导致一个... 查看详情

javaweb学习之hibernatedaosupport使用(代码片段)

...一下核心提示:1、继承了HibernateDaoSupport类的类获取session时,已不可用SessionFactory.OpenSessioon的形式来获取Session了,由于HibernateDaoSupport本身已有获取session的方法g 查看详情

关于node中cookie和session使用

HTTP协议的无状态性1)HTTP协议的通信模型:基于请求--处理---响应2)由于这个通信协议的关系,导致了HTTP每次请求之间都是没有关联的。每当一个请求完成之后,服务器就忘记之前谁曾经请求过!3)我们纯粹基于HTTP通信模型,... 查看详情

html5学习之关于cookie的expires过期时间无效分析

在学习Cookie的过程中发现Cookie设置过期时间后,过了设定时间Cookie并不会自动删除,重启浏览器甚至是重启电脑后重新打开网页还是不会自动删除,在百度等其他网站控制台设置也一样结果.对此现象我展开了深入分析.首先在检查语... 查看详情

学习笔记ionic学习之环境搭建

初学ionic,后面会把学习的点滴和踩到坑全部记录下来1.环境安装node.js官网地址:https://nodejs.org/en/下载安装包安装。自己记住自己的安装路径哦安装完成后我们测试一下方法运行-cmd 在命令窗口输入node-v npm-v 这样说明... 查看详情

spring学习之二(spring和hibernate整合)

...自己的属性配置3>映射文件的位置这三部分内容,在<session-factory>节点下, 查看详情

prometheus学习之机器监控(代码片段)

Prometheus使用exporter工具来暴露主机和应用程序上的指标。今天我们就使用node_exporter来收集各种主机指标数据(如:CPU、内存和磁盘等)。安装node_exporter从 Prometheus 的官网下载安装包,这里下载的是 Linux安装... 查看详情

prometheus学习之机器监控(代码片段)

Prometheus使用exporter工具来暴露主机和应用程序上的指标。今天我们就使用node_exporter来收集各种主机指标数据(如:CPU、内存和磁盘等)。安装node_exporter从 Prometheus 的官网下载安装包,这里下载的是 Linux安装... 查看详情

django目录

...RM中的锁和事务09.Django基础七之Ajax10.Django基础八之cookie和session11.Django基础九之中间件12.Django基础十之Form和ModelForm组件13.Django基础之django分页14.Django基础之jQuery操作cookie15.Django基础十一之认证系统16.Django学习之文件上传和下载17.D... 查看详情

node学习之(第三章:仿apache显示目录列表的功能)(代码片段)

前言今天咱们用Node.js中的核心模块以及上节学习的模板引擎art-template来实现服务器软件Apache的大体功能。用过Apache的朋友都知道,我们只需把本地文件放置在Apache的www目录下,开启服务器后,浏览器便可通过服务器访问本地文... 查看详情

node中怎么使用session(代码片段)

1.安装包需要安装express-session的包,还有cookie-parsernpminstallexpress-sessionnpminstallcookie-parser 2.引入包varexpress=require("express")varapp=express()//引用sessionvarsession=require("express-session");varcookieParser=require("cookie-parser") 3.开启cookie并且配... 查看详情

hibernate框架学习之数据查询(qbc)

...用面向对象的格式进行查询的计数lQBC查询方式步骤?获取Session对象?初始化Criteria对象(使用Session对象创建)?由Session对象创建?传入要查询的数据模型类?添加各种查询条件?执行查询返回结果(返回单条数据或集合数据)lQBC查询格式非... 查看详情

javaweb学习之hibernatedaosupport使用(代码片段)

...一下核心提示:1、继承了HibernateDaoSupport类的类获取session时,已不可用SessionFactory.OpenSessioon的形式来获取Session了,由于HibernateDaoSupport本身已有获取session的方法getSession(),所以直接用Sessionse=this.getSession();来获取࿰... 查看详情

linux学习-kubernetes学习之kubernetes安装部署(代码片段)

基于Centos7.5下kubeadm安装和部署kubernetes使用三台虚拟机进行部署(一台master,两台node)虚拟机IPmaster:192.168.88.101node1:192.168.88.102node2:192.168.88.103修改/etc/hosts配置#在三台虚拟机的/etc/hosts文件中添加主机名解析192.168.8 查看详情

node学习之(第二章:http模块)(代码片段)

...中和大家解释,也欢迎大家持续关注我的前端Node.js的学习之旅。http 查看详情