关于 session
session 是另一种记录客户状态的机制,与 cookie 保存在客户端浏览器不同,session 保存在服务器当中;
当客户端访问服务器时,服务器会生成一个 session 对象,对象中保存的是 key:value 值,同时服务器会将 key 传回给客户端的 cookie 当中;当用户第二次访问服务器时,就会把 cookie 当中的 key 传回到服务器中,最后服务器会吧 value 值返回给客户端。
因此上面的 key 则是全局唯一的标识,客户端和服务端依靠这个全局唯一的标识来访问会话信息数据。
设置 session
我们使用 express-session 模块来设置 session
安装 express-session
1
| cnpm install express-session --save
|
引入 express-session 模块
1
| const session=require("express-session");
|
设置 session
如下列代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| 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 进行设置
session 的常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13
| //设置session req.session.username="张三"
//获取session req.session.username
//重新设置cookie的过期时间 req.session.cookie.maxAge=1000;
//销毁session req.session.destroy(function(err){
})
|
以下演示通过销毁 session 的方式来退出登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| 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 信息,再回到首页显示为登陆。