node的express中间件之session

虽然session与cookie是分开保存的.但是session中的数据经过加密处理后默认保存在一个cookie中.因此在使用session中间件之前必须使用cookieParser中间件.

app.use(express.session([options]));

options参数的具体取值:

key:字符串,用于指定用来保存session的cookie名称,默认为coomect.sid.

store:属性值为一个用来保存session数据的第三方存储对象.

fingerprint:属性值为一个自定义指纹生成函数.

cookie:属性值为一个用来指定保存session数据的cookie设置的对象,默认值为{path:"/",httpOnly:true,maxAge:14400000}.

    path是cookie保存路径.httpOnly是否只针对http保存cookie,

    maxAge用于指定cookie的过期时间,单位为毫秒.

secret:字符串.用来对session数据进行加密的字符串.这个属性值为必须指定的属性.

在使用了session中间件后,代表客户端请求的http.IncomingMessage对象就具有了一个session属性.该属性保存了所有session数据.

 1 var express=require("express");
 2 var app=express();
 3 app.use(express.cookieParser());
 4 app.use(express.session({secret:"test"}));
 5 app.get("/index.html", function (req,res) {
 6     res.sendfile(__dirname+"/index.html");
 7     req.session.username="思思博士";
 8     req.session.password="123456"
 9 });
10
11 app.post("/index.html", function (req,res) {
12     res.write("用户名:"+req.session.username+"<br/>");
13     res.write("密码:"+req.session.password);
14     res.end();
15 });
16
17 app.listen(1337,"127.0.0.1", function () {
18     console.log("开始监听:1337");
19 });
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>session中间件的使用</title>
 6     <script type="text/javascript">
 7         function getSession(){
 8             var xhr=new XMLHttpRequest();
 9             xhr.open("post","index.html",true);
10             xhr.onload= function () {
11                 if(this.status=200){
12                     document.getElementById("res").innerHTML=this.response;
13                 }
14             };
15             xhr.send();
16         }
17     </script>
18 </head>
19 <body>
20 <input type="button" value="提交" onclick="getSession();" />
21 <div id="res"></div>
22 </body>
23 </html>

可以使用session属性对象的regenerate方法重新生成一个session管理器.

req.session.regenerate(function(err){

});

修改服务器端代码:

 1 var fs=require("fs");
 2 var express=require("express");
 3 var app=express();
 4 app.use(express.cookieParser());
 5 app.use(express.session({secret:"test"}));
 6 app.get("/index.html", function (req,res) {
 7     res.writeHead(200,{"Content-Type":"text/html"});
 8     res.write("<head><meta charset=‘utf-8‘ /><title>session中间件的简单使用事例</title></head>");
 9     var file=fs.createReadStream("index.html");
10     req.session.username="思思博士";
11     req.session.password="123456";
12     req.session.regenerate(function (err) {
13         if(err) console.log("session重新初始化失败.");
14         else console.log("session被重新初始化.");
15     });
16     file.pipe(res);
17 });
18 app.post("/index.html", function (req,res) {
19     res.write("用户名:"+req.session.username+"<br/>");
20     res.write("密码:"+req.session.password);
21     res.end();
22 });
23 app.listen(1337,"127.0.0.1", function () {
24     console.log("开始监听:1337");
25 });

或者:

 1 var fs=require("fs");
 2 var express=require("express");
 3 var app=express();
 4 app.use(express.cookieParser());
 5 app.use(express.session({secret:"test"}));
 6 app.get("/index.html", function (req,res) {
 7     res.sendfile(__dirname+"/index.html");
 8     req.session.username="思思博士";
 9     req.session.password="123456";
10     req.session.regenerate(function (err) {
11         if(err) console.log("session重新初始化失败.");
12         else console.log("session被重新初始化.");
13     });
14 });
15 app.post("/index.html", function (req,res) {
16     res.write("用户名:"+req.session.username+"<br/>");
17     res.write("密码:"+req.session.password);
18     res.end();
19 });
20 app.listen(1337,"127.0.0.1", function () {
21     console.log("开始监听:1337");
22 });

单击按钮后.获取的都是undefind了.

利用session的destroy方法销毁在用的session管理器,当服务器接收到下一个请求时,将重新生成一个session管理器.

req.session.destroy(function(err){

});

 1 var fs=require("fs");
 2 var express=require("express");
 3 var app=express();
 4 app.use(express.cookieParser());
 5 app.use(express.session({secret:"test"}));
 6 app.get("/index.html", function (req,res) {
 7     res.sendfile(__dirname+"/index.html");
 8     req.session.username="思思博士";
 9     req.session.password="123456";
10     req.session.destroy(function (err) {
11         if(err) console.log("session销毁失败.");
12         else console.log("session被销毁.");
13     });
14 });
15 app.post("/index.html", function (req,res) {
16     res.write("用户名:"+req.session.username+"<br/>");
17     res.write("密码:"+req.session.password);
18     res.end();
19 });
20 app.listen(1337,"127.0.0.1", function () {
21     console.log("开始监听:1337");
22 });

设置过期时间:

maxAge属性值来设置用于保存session数据的cookie过期时间或获取该cookie的剩余时间.

 1 var fs=require("fs");
 2 var express=require("express");
 3 var app=express();
 4 app.use(express.cookieParser());
 5 app.use(express.session({secret:"test"}));
 6 app.get("/index.html", function (req,res) {
 7     res.sendfile(__dirname+"/index.html");
 8     var long=30*1000;
 9     req.session.cookie.expires=new Date(Date.now()+long);
10     req.session.cookie.maxAge=long;
11     setInterval(function () {
12         console.log("cookie剩余时间:"+req.session.cookie.maxAge);
13     },1000);
14 });
15 app.listen(1337,"127.0.0.1", function () {
16     console.log("开始监听:1337");
17 });

每一秒显示一个过期时间

时间: 2024-08-08 22:05:49

node的express中间件之session的相关文章

node的express中间件之static之ajax提交json

static中间件可以使客户端直接访问网站中的所有静态文件. 利用这个功能可以直接把服务器上的静态页面直接读取出来返回到客户端. 从客户端点击一个按钮,向服务器端发送数据.并且插入到mysql数据库中去. 服务器端代码: 1 var express=require("express"); 2 var app=express(); 3 var mysql=require("mysql"); 4 var pool=mysql.createPool({ 5 host:&q

node的express中间件之bodyParser

bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理. 下面是一个文件上传的例子. 建立一个1.html页面 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>向服务器上传文件</title> 6 <script

node的express中间件之directory

direcotry中间件用于在浏览器中流出网站某个目录下的所有子目录及文件. app.use(express.directory(path,[options])); 查看网站根目录下的文件及目录 1 var express=require("express"); 2 var app=express(); 3 app.use(express.directory(__dirname)); 4 /*app.use(express.static(__dirname)); 5 app.use(e

Node.js连接Mysql,并把连接集成进Express中间件中

引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以单独对mysql配置,也可以把connection集成到express中间件中. 最后送上一个node.js 连接各种主流数据库示例代码. 前提条件 1.安装mysql对应的驱动,npm install mysql 2.安装第三方插件express-connection, npm install e

body-parser Node.js(Express) HTTP请求体解析中间件

body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日     781     声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包含请求体,Node.js 原生HTTP模块中,请求体要基于流的方式接收和解析.body-parser是一个HTTP请求体解析中间件,使用这个模块可以解析JSON.Raw.文本.URL-encoded格式的请求体,Express框架中就是使用这个模块做为请求体解析中间件. 请求体解析 1.1 原生环境

node、express框架

前面的话 Express是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助开发者创建各种 Web 和移动设备应用.本文将详细介绍express框架 概述 官网对Express的描述,它是一个基于 Node.js 平台,快速.开放.极简的 web 开发框架.优点是易上手.高性能.扩展性强 1.易上手:nodejs最初就是为了开发高性能web服务器而被设计出来的,然而相对底层的API会让不少新手望而却步.express对web开发相关的模块进行了适度的封装,屏蔽

node学习之cookie和session

c什么是cookie Cookie设计的初衷是 维持浏览器和服务端的状态.http是无状态的,服务端不能跟踪客户端的状态. 浏览器第一次向服务器发送请求,服务器会返回一个cookie给客户端浏览器,浏览器下一次发送请求时,会携带cookie. 而node.js 的框架express 因为保持高性能, 没有封装太多的功能,而是按需加载的形式, 引入自己需要的中间件.而cookie 常用的插件是cookie-parser 读取cookie: 需要借助cookie-parser. //引入cookie

Node.js Express+Mongodb 项目实战

Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很不错的练手项目,分享给大家. GitHub源码:https://github.com/oceanMin/cms 项目前准备 安装node.js 安装express 安装mongoDB 章节目录 快速开始 快速开始 模块 express商品管理系统介绍 框架搭建.ejs .express.static

express中间件的理解

官网对它的阐述是这样的: "Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件." 由此可见,中间件在Express开发中的重要性,因此这里我们就专门来总结一下中间件. 一.中间件结构 app.use([path],function) path:是路由的url,默认参数'/',意义是路由到这个路径时使用这个中间件 function:中间件函数 这个中间件函数可以理解为就是function(request,