手机版

节点中会话的特定用途

时间:2021-08-30 来源:互联网 编辑:宝哥软件园 浏览:

前言

在前一篇文章中,介绍了节点中的cookie,本文将继续解释session。

什么是会话

会话只是会话,那么什么是会话呢?

会话是一个粒度大于连接的概念。一个会话可以包含多个连接,每个连接都被视为会话的一个操作。

当用户在网页之间跳转时,存储在Session对象中的变量不会丢失,而是会一直存在于整个用户会话中。

当用户从应用程序请求网页时,如果用户没有会话,网络服务器将自动创建会话对象。当会话过期或被放弃时,服务器将终止会话。

说到这里,我们先来看看商品。

最初,会话中间件生成的会话是一个对象,其中包含cookie信息。

节点中的会话

首先,安装express框架、cookieParser中间件和express-session中间件

NPM I Express-save NPM I cookie-parser-save NPM I Express-session-save默认情况下,会话信息由express session中间件存储在内存中,需要签名cookie,所以在制作cookieParser()时,必须传递一个密钥。错误:如果没有密钥,将提醒会话所需的密钥选项

代码如下:

var express=require(' express ');var cookieParser=require(' cookie-parser ');var session=require(' express-session ');var app=express()app . use(cookieParser())const hour=1000 * 60 * 60;var sessionOpts={//set secret secret : ' a cool secret ',//strong制将会话保存回会话存储区resave : true,//strong制将“未初始化”的会话保存到存储区。保存未初始化的3360 true,//设置会话cookie名称。默认值为connect.sidkey:' myapp _ sid ',//如果secure设置为true,并且您通过http访问您的站点。不会设置cookie。cookie: { maxAge: hour * 2,secure : false } } app . use(session(Sessionopts))app . use(function(req,res,Next) {if (req。URL==='/favicon。ico’){ return }//对于同一个浏览器,req是同一个var sess=req.sessionconsole . log(sess)if(sess . view){ sess . view;} else { sess . view=1;} res.setHeader('Content-Type ',' text/html ');RES . write(' pviews 3360 ' sess . view '/p ');RES . end();});app . listen(4000);上面的代码实现了一个简单的页面浏览计数功能。

运行以上代码,可以打开浏览器,不断刷新页面,观察节点程序中打印的sess值。

我们发现,当页面在同一个浏览器中刷新时,控制台上打印的是同一个会话,只是视图的值发生了变化,即多个http连接对应同一个会话。

会话保存在redis中

默认情况下,Express会话中间件将会话信息存储在内存中,但是在开发和生产过程中,最好有一个持久的和可扩展的数据来存储您的会话数据。express社区已经使用数据库创建了几个会话存储,包括MongoDB、Redis、Memcached、PostgreSQL和其他数据库。然而,低延迟密钥/值存储最适合这种易失性数据。这里,我们首先使用redis来存储会话信息。

首先,安装connect-redis模块

NPM电信公司代码如下:

var express=require(' express ');var cookieParser=require(' cookie-parser ');var session=require(' express-session ');var redis store=require(' connect-redis ')(session);var app=express()app。使用(cookieParser())var选项={ host: '127.0.0.1 ',port: 6379,db: 1,//要使用的数据库索引。默认为使用心得的默认值(0)。前缀: ' id : '/密钥前缀默认为sess : '/通过Redis的: ' AAA '/密码身份验证} const hour=1000 * 60 * 60 var sessionOpts={ store : new redistore(选项),//设置密钥secret: "很酷的秘密",//strong制将会话保存回会话存储resave: true,//strong制将"未初始化"的会话保存到存储saveUninitialized: true,//设置会话甜饼干名key :“my app _ sid”,//如果安全的设置为没错,并且您通过超文本传送协议访问您的站点,则不会设置饼干.cookie: { maxAge: hour * 8,secure : false } } app。use(session(Sessionapts))//如果没有秘密,会提醒错误:会话应用程序。使用(函数(req,res,next)){ if(req。URL=='/fav图标。ico '){ return } var sess=req。会议;req.sessionID//会话身份证,只读console.log(sess,id);if(sess。视图){ sess。查看;//如果放在res.end()后,不会自增res.setHeader('内容类型','文本/html ');RES . write(' pvview 3360 ' sess。视图'/p ');写于:年PEX大火。饼干。MaxAge/1000)s/p’;RES . end();} else { sess。视图=1;res.end('欢迎使用会话演示。刷新!");}});app。听(4000);上面程序中,将会话信息存入了存储的db1数据库中,运行后,刷新浏览器,数据库中的信息如下:

会议存入数据库

首先,得安装connect-mongo模块

国家预防机制一连接-蒙戈-保存代码如下:

var express=require(' express ');var cookieParser=require(' cookie-parser ');var session=require(' express-session ');var MongoStore=required(' connect-mongo ')(会话);const hour=1000 * 60 * 60 var app=express()app。使用(cookieParser())app。use(session({ secret : ' a cool secret ',key: 'mongo_sid ',cookie: { maxAge: hour * 8,secure: false },resave: true,saveUninitialized: true,store : new MongoStore({ URL 3: ' mongodbd)app . use(function(req,res,next){ if(req。URL==='/fav图标。ico '){ return } var sess=req。会议;req.sessionID//会话身份证,只读console.log(sess,id);if(sess。视图){ sess。查看;} else { sess。视图=1;} res.setHeader('Content-Type ',' text/html ');RES . write(' pvview 3360 ' sess。视图'/p ');写于:年PEX大火。饼干。MaxAge/1000)s/p’;RES . write(' phtponly : ' sess。饼干。http nly '/p ');RES . write(' ppath : ' sess。饼干。路径'/p ');RES . write(' PSE治愈: ' sess。饼干。secure '/p ');RES . end();});app。听(4000);运行后,刷新浏览器页面,在demodb数据库中的会议集合中发现已经存入了如下会议信息。

可能会有人问:结果是看到了,但这过程中到底发生了什么呢?

其实,当浏览器发起第一次请求时,会话中间件会生成一个会议对象(其中包含甜饼干信息),这个会议对象会存入数据库数据库中,同时,请求返回时,浏览器客户端会自动将这个会议对象中的甜饼干保存起来,注意哦,浏览器存的可是饼干,而不是会议对象。

这个甜饼干有一个过期时间,比如,上面代码中设置的是8小时。也就是说,8小时后,这个甜饼干在浏览器中会自动消失。

最后

现在,你弄清楚会议和甜饼干之间的关系了吗?下一篇我将对结节中的密码安全进行介绍,敬请期待哦。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:节点中会话的特定用途是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。