express-session的简单使用说明

为什么需要用session?

我们知道Internet 通过协议分为stateful和stateless两类,而http是stateless协议,客户端发送请求到服务端建立一个连接,请求得到响应后连接即中断,服务器端不会记录状态,因此服务器端想要确定是哪个客户端提交过来的请求,就必须要借助一些东西去完成:session和cookies。

express-session

session存在于服务器端,需要cookies的协议协助才能完成,服务器端和客户端通过session id来建立联系。
express中可以用中间件来使用session,expres-session可以存在内存中,也可以存在mongodb、redis等中。想了解更多中间件可以:https://github.com/senchalabs/connect#middleware

使用:

安装: npm install express-session

示例:使用session来判断用户是否已经登录,如果没有登录,则跳转到登录页

//app.js
var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');

...      

//这里传入了一个密钥加session id
app.use(cookieParser('Wilson'));
//使用就靠这个中间件
app.use(session({ secret: 'wilson'}));

...
//user.js

var express = require('express');
var router = express.Router();
var options = require('../config/database-default')
var db = require('../config/db.js');

//请求作者页
router.route('/user/index').get(function(req,res,next){
    console.log(req.session.user);
    if(req.session.user){
        res.render('user',{title:'作者管理'});
    }else{
        req.session.originalUrl = req.originalUrl?req.originalUrl:null;//记录用户的请求路径
        console.log(req.session.originalUrl);
        res.redirect('/login');
    }
})
//login.js
var express = require('express');
var router = express.Router();
//后台管理系统登录

router.route('/login').get(function(req,res,next){
    if(req.session.islogin){
        res.locals.islogin = req.session.islogin;
    }
    if(req.cookies.islogin){
        req.session.islogin = req.cookies.islogin;
    }
    console.log('this is login')
    res.render('login',{title:'登录'});
}).post(function(req,res){
    console.log(req.session.originalUrl);


    //req.session.user = user;//将用户信息写入到session
    if(req.session.originalUrl){
        var redirectUrl = req.session.originalUrl;
        req.session.originalUrl = null;
    }else{//不存在原始请求路径,则将用户重定向到首页路劲
        var redirectUrl = '/index';
    };
    console.log('yes');
    req.session.user = 'zhangsan';
    res.redirect(redirectUrl);
});

module.exports = router;

清除session

req.session.destroy();
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值