Express全系列教程之(八):session的基本使用

1、关于session

session是另外一种记录客户状态的机制,与cookie保存在客户端浏览器不一样,session保存在服务器当中;
当客户端访问服务器时,服务器会生成一个session对象,对象中保存的是key:value值,同时服务器会将key传回给客户端的cookie当中;当用户第二次访问服务器时,就会把cookie当中的key传回到服务器中,最后服务器会吧value值返回给客户端。
所以上面的key则是全局惟一的标识,客户端和服务端依靠这个全局惟一的标识来访问会话信息数据。express

 

2、设置session

咱们使用express-session模块来设置sessionnpm

  1.安装express-session浏览器

cnpm install express-session --save

  2.引入express-session模块服务器

const session=require("express-session");

  3.设置sessioncookie

session(options);

  以下列代码:session

const express=require("express");
const session=require("express-session");

var app=express();

//配置中间件
app.use(session({
	secret: "keyboard cat",
	 resave: false,
	 saveUninitialized: true,
	 cookie: ('name', 'value',{maxAge:  5*60*1000,secure: false})
}));

app.use('/login',function(req,res){
	//设置session
	req.session.userinfo='张三';
	res.send("登录成功!");
});

app.use('/',function(req,res){
	//获取session
	if(req.session.userinfo){
		res.send("hello "+req.session.userinfo+",welcome");
	}else{
		res.send("未登录");
	}
});

app.listen(8080);

  在session(option)中对session进行设置,它的主要参数是:app

1. name - cookie的名字(原属性名为 key)。(默认:’connect.sid’)
2. store - session存储实例
3. secret - 用它来对session cookie签名,防止篡改
4. cookie - session cookie设置 (默认:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })
5. genid - 生成新session ID的函数 (默认使用uid2库)
6. rolling - 在每次请求时强行设置cookie,这将重置cookie过时时间(默认:false)
7. resave - 强制保存session即便它并无变化 (默认: true, 建议设为:false)
8. proxy - 当设置了secure cookies(经过”x-forwarded-proto” header )时信任反向代理。当设定为true时,
”x-forwarded-proto” header 将被使用。当设定为false时,全部headers将被忽略。当该属性没有被设定时,将使用Express的trust proxy。
9. saveUninitialized - 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于未初始化状态。在设定一个cookie前,这对于登录验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true)
10. unset - 控制req.session是否取消(例如经过 delete,或者将它的值设置为null)。这可使session保持存储状态但忽略修改或删除的请求(默认:keep)

 

3、session的经常使用方法

req.session.username="张三"

//获取session
req.session.username

//从新设置cookie的过时时间
req.session.cookie.maxAge=1000;

//销毁session
req.session.destroy(function(err){
	
})

  如下演示经过销毁session的方式来退出登陆:函数

const express=require("express");
const session=require("express-session");

var app=express();

//配置中间件
app.use(session({
	secret: "keyboard cat",
	 resave: false,
	 saveUninitialized: true,
	 cookie: ('name', 'value',{	maxAge:  5*60*1000,
								secure: false,
								name: "seName",
								resave: false})
}));

app.use('/login',function(req,res){
	//设置session
	req.session.userinfo='张三';
	res.send("登录成功!");
});

app.use('/loginOut',function(req,res){
	//注销session
	req.session.destroy(function(err){
		res.send("退出登陆!"+err);
	});
});

app.use('/',function(req,res){
	//获取session
	if(req.session.userinfo){
		res.send("hello "+req.session.userinfo+",welcome to index");
	}else{
		res.send("未登录");
	}
});

app.listen(8080);

  当咱们进入到主页时,未显示任何信息,进入login路由后,自动设置session,这是回到主页则显示session信息,以后进入loginOut路由已注销session信息,再回到首页显示为登录。ui

相关文章
相关标签/搜索