• express-session的简单使用说明


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

    express-session

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

    https://www.npmjs.com/package/express-session

    使用:

    安装: 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();
  • 相关阅读:
    CLR自定义菜单项(ToolStripItem)
    WinForm停靠控件介绍:WeifenLuo.WinFormsUI.Docking.dll
    D3D11中的设备介绍
    D3D11 Effect状态的设置
    在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的
    精确获取时间(QueryPerformanceCounter)
    定点数与浮点数
    error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2'
    fpu,mmx以及sse寄存器的少量简介
    灵宝方言(超搞笑)
  • 原文地址:https://www.cnblogs.com/miaosen/p/8025011.html
Copyright © 2020-2023  润新知