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 ...
随机推荐
- visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
问题描述 “Win32Project3.exe”(Win32): 已加载“D:\software\VS2013\VS2013 文档\Win32Project3\Debug\Win32Project3. ...
- CUDA Samples: Long Vector Add
以下CUDA sample是分别用C++和CUDA实现的两个非常大的向量相加操作,并对其中使用到的CUDA函数进行了解说,各个文件内容如下: common.hpp: #ifndef FBC_CUDA_ ...
- NSLog 打印出方法函数,行数,内容
#if DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"\nfunction:%s line:%d content:%s\n", ...
- Uncaught TypeError: jQuery.i18n.browserLang is not a function
/********************************************************************* * Uncaught TypeError: jQuery. ...
- TCP的粘包
产生原因: * tcp传输以字节流的方式发送消息,消息之间没有边界 * 发送比接受的速度快,因此不能保证每次都能及时被接收 影响 : 对每次发送的内容是一个独立的意思需要单独识别 如何处理: 1. 每 ...
- java区分绝对路径和相对路径
java区分绝对路径和相对路径 这里要区分的是目录路径 如: /opt/deve/tomcat/bin c:\deve\tomcat\bin 都是绝对目录路径 bin bin/data bin\dat ...
- softmax与logistic关系
Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问 ...
- Filter学习(一)
一.Filter简介 Filter:可以对web服务器管理的所有web资源(如Jsp, Servlet, 静态图片文件或静态 html 文件等)进行拦截,从而实现一些特殊的功能.例如实现URL级别的权 ...
- 让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制
各种操作系统的控制台都支持 ANSI 转义序列(ANSI Escape Code).使用转义序列,可以对控制台进行很多额外的定制,例如修改颜色.修改标题栏,将文字添加下划线等. 当然,.NET 已经帮 ...
- RabbitMQ消息队列———安装(一)
一.RabbitMQ队列 不同进程间的通信,简称IPC.不同的进程间的通信,可以基于队列解决,将生产者和消费者进行解耦,中间的队列作为其桥梁.RabbitMQ是一个在AMQP基础上完整的,可复用的企业 ...