本篇文章给大家分享的是有关如何正确的在节点中使用会话方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>会话是什么强>
会话不就是会话嘛,那什么是会话呢?
会话是一个比连接粒度更大的概念,一次<代码>会话> 代码可能包含多次<代码>连接> 代码,每次连接都被认为是会话的一次操作。
当用户在Web页面之间跳转时,存储在会话对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
当用户请求来自应用程序的Web页面时,如果该用户还没有会话,则Web服务器将自动创建一个会话对象。当会话过期或被放弃后,服务器将终止该会话。
说了这么多,我们先来看看这货吧。
原来会话中间件生成的会话是一个对象,里面包含了饼干信息。
<强>节点中会话的强>
首先,安装表达框架,cookieParser中间件,express-session中间件
npm 小姐:express ——保存 npm 小姐:cookie-parser ——保存 npm 小姐:express-session ——拯救
默认情况下,表达会话中间件是把会话信息存储在内存中,且需要用<代码>签名饼干> 代码,所以在使cookieParser()时得给它传给一个<代码>秘钥> 代码。如果没有秘钥,则会提醒<代码>错误:秘密选择所需课程代码>
代码如下:
var express =,要求(& # 39;表达# 39;); var cookieParser =,要求(& # 39;cookie-parser& # 39;); var session =,要求(& # 39;express-session& # 39;); var app =,表达() app.use (cookieParser ()) const hour =, 1000, *, 60, *, 60; var sessionOpts =, { ,//设置密钥 ,秘密:& # 39;a cool 秘密# 39; ,//Forces 从而session 用be saved back 用,session 商店 ,重新保存:没错, ,//Forces a  session that is “uninitialized",用be saved 用,商店。 ,saveUninitialized:没错, ,//设置会话饼干名,,默认是connect.sid ,关键:& # 39;myapp_sid& # 39; ,//If secure  is set 用真的,,以及你access your site 配套;HTTP、,从而cookie will not be 集。 ,饼干:{,maxAge: hour *, 2,安全:,false } } app.use(会话(sessionOpts)) app.use(功能(要求的事情,,,,下一个),{ ,if (req.url ===, & # 39;/favicon.ico& # 39;), { ,返回 ,} ,//同一个浏览器而言,要求是同一个 ,var sess =, req.session; ,console.log(税) ,if (sess.views), { sess.views才能+ +; ,}else { 时间=sess.views 才能;1; ,} ,res.setHeader(& # 39;内容类型# 39;,,& # 39;text/html # 39;); ,res.write (& # 39; & lt; p>视图:,& # 39;,+,sess.views +, & # 39; & lt;/p> & # 39;); ,res.end (); }); app.listen (4000),
上面代码实现了一个简单的<代码>页面浏览计数代码>功能。
运行上面代码,可以打开浏览器,不断刷新页面,观察节点程序中打印的税值。
我们发现,在同一个浏览器中刷新页面,控制台上打印的是同一个会话,只不过其中的观点的值变了,也就是说,多次http连接对应的是同一个会话。
<强>会话存入复述,强>
默认情况下,表达会话中间件是把会话信息存储在内存中,但在开发和生产期间,最好有一个持久化的,可扩展的数据存放你的会话数据.express社区已经创建了几个使用数据库的会话存储,包括MongoDB,复述,Memcached, PostgreSQL以及其他数据库。但低延迟的<代码>键/值存储> 代码最适合这种易失性数据,这里我们先用复述来存储会话信息。
首先,安装connect-redis模块
npm 小姐:connect-redis ——保存
代码如下:
var express =,要求(& # 39;表达# 39;); var cookieParser =,要求(& # 39;cookie-parser& # 39;); var session =,要求(& # 39;express-session& # 39;); var RedisStore =,要求(& # 39;connect-redis& # 39;)(会话); var app =,表达() app.use (cookieParser ()) var options =, { 主持人:大敌;& # 39;127.0.0.1 # 39; 6379年,端口: ,db: 1,,//, Database index 用使用只Defaults 用复述,# 39;s default (0)。 ,前缀:& # 39;ID: & # 39;,//, Key prefix defaulting 用“捐:“ ,//通过:& # 39;aaa # 39;,//, Password for Redis 身份验证 } const hour =, 1000, *, 60, *, 60; var sessionOpts =, { ,存储:new RedisStore(选项) ,//设置密钥 ,秘密:& # 39;a cool 秘密# 39; ,//Forces 从而session 用be saved back 用,session 商店 ,重新保存:没错, ,//Forces a  session that is “uninitialized",用be saved 用,商店。 ,saveUninitialized:没错, ,//设置会话饼干名 ,关键:& # 39;myapp_sid& # 39; ,//If secure  is set 用真的,,以及你access your site 配套;HTTP、,从而cookie will not be 集。 ,饼干:{,maxAge: hour *, 8日,安全:,false } } null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何正确的在节点中使用会话方法