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数据.
var express=require("express");
var app=express();
app.use(express.cookieParser());
app.use(express.session({secret:"test"}));
app.get("/index.html", function (req,res) {
res.sendfile(__dirname+"/index.html");
req.session.username="思思博士";
req.session.password="123456"
}); app.post("/index.html", function (req,res) {
res.write("用户名:"+req.session.username+"<br/>");
res.write("密码:"+req.session.password);
res.end();
}); app.listen(1337,"127.0.0.1", function () {
console.log("开始监听:1337");
});
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>session中间件的使用</title>
<script type="text/javascript">
function getSession(){
var xhr=new XMLHttpRequest();
xhr.open("post","index.html",true);
xhr.onload= function () {
if(this.status=200){
document.getElementById("res").innerHTML=this.response;
}
};
xhr.send();
}
</script>
</head>
<body>
<input type="button" value="提交" onclick="getSession();" />
<div id="res"></div>
</body>
</html>
可以使用session属性对象的regenerate方法重新生成一个session管理器.
req.session.regenerate(function(err){
});
修改服务器端代码:
var fs=require("fs");
var express=require("express");
var app=express();
app.use(express.cookieParser());
app.use(express.session({secret:"test"}));
app.get("/index.html", function (req,res) {
res.writeHead(200,{"Content-Type":"text/html"});
res.write("<head><meta charset='utf-8' /><title>session中间件的简单使用事例</title></head>");
var file=fs.createReadStream("index.html");
req.session.username="思思博士";
req.session.password="123456";
req.session.regenerate(function (err) {
if(err) console.log("session重新初始化失败.");
else console.log("session被重新初始化.");
});
file.pipe(res);
});
app.post("/index.html", function (req,res) {
res.write("用户名:"+req.session.username+"<br/>");
res.write("密码:"+req.session.password);
res.end();
});
app.listen(1337,"127.0.0.1", function () {
console.log("开始监听:1337");
});
或者:
var fs=require("fs");
var express=require("express");
var app=express();
app.use(express.cookieParser());
app.use(express.session({secret:"test"}));
app.get("/index.html", function (req,res) {
res.sendfile(__dirname+"/index.html");
req.session.username="思思博士";
req.session.password="123456";
req.session.regenerate(function (err) {
if(err) console.log("session重新初始化失败.");
else console.log("session被重新初始化.");
});
});
app.post("/index.html", function (req,res) {
res.write("用户名:"+req.session.username+"<br/>");
res.write("密码:"+req.session.password);
res.end();
});
app.listen(1337,"127.0.0.1", function () {
console.log("开始监听:1337");
});
单击按钮后.获取的都是undefind了.
利用session的destroy方法销毁在用的session管理器,当服务器接收到下一个请求时,将重新生成一个session管理器.
req.session.destroy(function(err){
});
var fs=require("fs");
var express=require("express");
var app=express();
app.use(express.cookieParser());
app.use(express.session({secret:"test"}));
app.get("/index.html", function (req,res) {
res.sendfile(__dirname+"/index.html");
req.session.username="思思博士";
req.session.password="123456";
req.session.destroy(function (err) {
if(err) console.log("session销毁失败.");
else console.log("session被销毁.");
});
});
app.post("/index.html", function (req,res) {
res.write("用户名:"+req.session.username+"<br/>");
res.write("密码:"+req.session.password);
res.end();
});
app.listen(1337,"127.0.0.1", function () {
console.log("开始监听:1337");
});
设置过期时间:
maxAge属性值来设置用于保存session数据的cookie过期时间或获取该cookie的剩余时间.
var fs=require("fs");
var express=require("express");
var app=express();
app.use(express.cookieParser());
app.use(express.session({secret:"test"}));
app.get("/index.html", function (req,res) {
res.sendfile(__dirname+"/index.html");
var long=30*1000;
req.session.cookie.expires=new Date(Date.now()+long);
req.session.cookie.maxAge=long;
setInterval(function () {
console.log("cookie剩余时间:"+req.session.cookie.maxAge);
},1000);
});
app.listen(1337,"127.0.0.1", function () {
console.log("开始监听:1337");
});
每一秒显示一个过期时间
node的express中间件之session的更多相关文章
- Node.js + Express中间件详解
使用中间件 Express是一种路由和中间件Web框架,它具有自己的最小功能:Express应用程序本质上是一系列中间件函数调用. 中间件函数是可以访问请求对象 (req),响应对象(res)以及应用 ...
- node的express中间件之static之ajax提交json
static中间件可以使客户端直接访问网站中的所有静态文件. 利用这个功能可以直接把服务器上的静态页面直接读取出来返回到客户端. 从客户端点击一个按钮,向服务器端发送数据.并且插入到mysql数据库中 ...
- node的express中间件之directory
direcotry中间件用于在浏览器中流出网站某个目录下的所有子目录及文件. app.use(express.directory(path,[options])); 查看网站根目录下的文件及目录 va ...
- node的express中间件之bodyParser
bodyParser用于解析客户端请求的body中的内容,内部使用JSON编码处理,url编码处理以及对于文件的上传处理. 下面是一个文件上传的例子. 建立一个1.html页面 <!DOCTYP ...
- express 中间件的简单应用与实现
express 中间件的简单应用与实现 看了慕课网双越老师的课之后结合自己的理解做了一些简单的总结,如有不恰当之处,欢迎指正. 提到 express 就不得不提到中间件,接下来就简单的介绍一下 exp ...
- Node.js连接Mysql,并把连接集成进Express中间件中
引言 在node.js连接mysql的过程,我们通常有两种连接方法,普通连接和连接池. 这两种方法较为常见,当我们使用express框架时还会选择使用中间express-myconnection,可以 ...
- body-parser Node.js(Express) HTTP请求体解析中间件
body-parser Node.js(Express) HTTP请求体解析中间件 2016年06月08日 781 声明 在HTTP请求中,POST.PUT和PATCH三种请求方法中包 ...
- 对于Node中Express框架的中间件概念的感知
中间件是什么呢? 中间件就是客户端http请求发起传送到服务器和服务器返回响应之间的一些处理函数. 为什么要使用中间件? 通过中间件,可以对数据进行操作使得我们能方便地操作请求数据编写服务器响应.如b ...
- express 框架之session
一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...
随机推荐
- c# 一个记录日志的通用方法
public static string WriteFile(string strText, string path) { Encoding code = Encoding.GetEncoding(& ...
- 浅析Symbol
不知道大家有没有留意ES6中的Symbol函数?在此之前,我对Symbol的认识知识这样的: 一.Symbol()和Symbol.for('str') Symbol()是独一无二的,你无法创建两个相 ...
- 手游服务端框架之使用Guava构建缓存系统
缓存的作用与应用场景 缓存,在项目中的应用非常之广泛.诸如这样的场景,某些对象计算或者获取的代码比较昂贵,并且在程序里你不止一次要用到这些对象,那么,你就应该使用缓存. 缓存跟java的Coucurr ...
- CS231n课程笔记翻译1:Python Numpy教程
译者注:本文智能单元首发,翻译自斯坦福CS231n课程笔记Python Numpy Tutorial,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成,Flood Sung ...
- Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump
相关文章 Android性能优化系列 Java虚拟机系列 前言 要想做好内存优化工作,就要掌握两大部分的知识,一部分是知道并理解内存优化相关的原理,另一部分就是善于运用内存分析的工具.本篇就来介绍内存 ...
- 在Golang中获取系统的磁盘空间内存占用
获取磁盘占用情况(Linux/Mac下有效) import ( "syscall" ) type DiskStatus struct { All uint64 `json:&quo ...
- I.MX6 修改调试串口号(ttymx0 -> ttymxc2)
I.MX6 修改调试串口号(ttymx0 -> ttymxc2) 一.参考文章: uboot修改默认调试串口ttymxc0 ->ttymxc4(imx53) http://www.xueb ...
- 关于掌握C#的内存堆栈概念
很多时候,我们使用C#语言书写业务逻辑时,并不会太多地主动考虑到内存的占用和分配问题,但编的程序多了,就总会遇到一些性能问题.提到"性能"二字,就不得不考虑CPU和内存,而提到内存 ...
- HDU3047 Zjnu Stadium 【带权并查集】
HDU3047 Zjnu Stadium Problem Description In 12th Zhejiang College Students Games 2007, there was a n ...
- Linux下Eclipse配置安装 PyDev(Pydev插件一直不能成功,安装这个插件失败的问题)
pydev插件安装方式如果采取从网络上下载,然后解压到eclipse中文件夹到方式,运行到时候可能会导致重启eclipse后根本看不到这个插件! 原因以及解决方式,看下面! 转自:http://ww ...