node.js 中间件express-session使用详解


Posted in Javascript onMay 20, 2017

本文介绍的关于node.js中间件express-session的相关内容,分享出来供大家从参考学习,下面来一起看看详细的介绍:

一、为什么使用session?

session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。

当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。

session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失。

二、session的工作流程:

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对, 然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),找到对应的session(value) 。 客户的信息都保存在session中。

三、express-session的常用参数:

secret:一个String类型的字符串,作为服务器端生成session的签名。

name:返回客户端的key的名称,默认为connect.sid,也可以自己设置。

resave:(是否允许)当客户端并行发送多个请求时,其中一个请求在另一个请求结束时对session进行修改覆盖并保存。

默认为true。但是(后续版本)有可能默认失效,所以最好手动添加。

saveUninitialized:初始化session时是否保存到存储。默认为true, 但是(后续版本)有可能默认失效,所以最好手动添加。

cookie:设置返回到前端key的属性,默认值为{ path: ‘/', httpOnly: true, secure: false, maxAge: null }

express-session的一些方法:

Session.destroy() :删除session,当检测到客户端关闭时调用。

Session.reload() :当session有修改时,刷新session。

Session.regenerate() :将已有session初始化。

Session.save() :保存session。

四、示例demo

//app.js中添加如下代码(已有的不用添加)
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

app.use(cookieParser('sessiontest'));
app.use(session({
 secret: 'sessiontest',//与cookieParser中的一致
 resave: true,
 saveUninitialized:true
}));
//修改router/index.js,第一次请求时我们保存一条用户信息。
router.get('/', function(req, res, next) {
 var user={
  name:"Chen-xy",
  age:"22",
  address:"bj"
 }
 req.session.user=user;
 res.render('index', {
  title: 'the test for nodejs session' ,
  name:'sessiontest'
 });
});
//修改router/users.js,判断用户是否登陆。
router.get('/', function(req, res, next) {
 if(req.session.user){
  var user=req.session.user;
  var name=user.name;
  res.send('你好'+name+',欢迎来到我的家园。');
 }else{
  res.send('你还没有登录,先登录下再试试!');
 }
});

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Javascript异步编程的4种方法让你写出更出色的程序
Jan 17 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
原始的js代码和jquery对比体会
Sep 10 Javascript
往光标所在位置插入值的js代码
Sep 22 Javascript
Javasipt:操作radio标签详解
Dec 30 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
Oct 26 Javascript
CSS或者JS实现鼠标悬停显示另一元素
Jan 22 Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 Javascript
vuex实现及简略解析(小结)
Mar 01 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 Javascript
JS 调试中常见的报错问题解决方法
May 20 #Javascript
详解使用angular-cli发布i18n多国语言Angular应用
May 20 #Javascript
ztree实现权限横向显示功能
May 20 #Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 #Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 #Javascript
微信小程序利用co处理异步流程的方法教程
May 20 #Javascript
关于jQuery库冲突的完美解决办法
May 20 #jQuery
You might like
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
四种php中webservice实现的简单架构方法及实例
2015/02/03 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
js left,right,mid函数
2008/06/10 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
python 堆和优先队列的使用详解
2019/03/05 Python
解析Python3中的Import
2019/10/13 Python
python 连续不等式语法糖实例
2020/04/15 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
python 实现图片裁剪小工具
2021/02/02 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
全球速卖通法国在线交易平台:AliExpress法国
2017/07/07 全球购物
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
幼儿园教师考核制度
2014/02/01 职场文书
奠基仪式策划方案
2014/05/15 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
购房协议书范本
2014/10/02 职场文书
酒店前台岗位职责
2015/04/16 职场文书
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android