博客详情

express之session的使用 (原创)

作者: 朝如青丝暮成雪
发布时间:2018-02-24 23:06:00  文章分类:nodejs   阅读(832)  评论(0)

本篇,我们将在express中引入session支持(引入express-session模块).

介绍下express中如何集成配置session。

03_ejs_session.js


//03_ejs_session.js
//介绍 express中session 的使用
// 1  npm install  express-session --save  安装

//2 配置express-session 中间件
// app.use(session({
//     secret: 'this is string key',   // 可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名
//     name:'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
//     resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
//     saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
//     cookie: {
//         maxAge:1000*30*60    /*过期时间*/
//
//     },   /*secure https这样的情况才可以访问cookie*/
//
//     //设置过期时间比如是30分钟,只要游览页面,30分钟没有操作的话在过期
//
//     rolling:true //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
// }))


var express = require("express");
var bodyParser = require('body-parser');
var session = require("express-session");

var app = express();


//设置 express模板引擎为 ejs
app.set("view engine","ejs");
//设置模板的位置 (  缺省位置也是 __dirname + '/views')
app.set('views', __dirname + '/views');


//配置body-parser中间件
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// parse application/json
app.use(bodyParser.json());

//配置express-session 中间件
app.use(session({
    secret: 'mysessionKey',   // 可以随便写。 一个 String 类型的字符串,作为服务器端生成 session 的签名
    name:'session_id',/*保存在本地cookie的一个名字 默认connect.sid  可以不设置*/
    resave: false,   /*强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false。*/
    saveUninitialized: true,   //强制将未初始化的 session 存储。  默认值是true  建议设置成true
    cookie: {
        maxAge:1000*30*60    /*过期时间*/

    },   /*secure https这样的情况才可以访问cookie*/

    //设置过期时间比如是30分钟,只要游览页面,30分钟没有操作的话在过期
    rolling:true ,//在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)

    //将session 信息持久化到mongodb
    // store:new MongoStore({
    //     url: 'mongodb://127.0.0.1:27017/shop',  //数据库的地址
    //     touchAfter: 24 * 3600   //time period in seconds  通过这样做,设置touchAfter:24 * 3600,您在24小时内只更新一次会话,不管有多少请求(除了在会话数据上更改某些内容的除外)
    // })


}));

//配置session 获取中间件
app.use(function(req, res, next){
    res.locals.session = req.session;
    next();
});
//  <%=session.user.username%>  ejs页面中这样可以获取session中用户信息

//去登录页面
app.get("/login",function (req,res) {

    res.send("<html><h3>用户登录</h3>" +
        "<form action='/login' method='post'> " +
        "用户名:<input  type='text' name='username'/> <br/>"+
        "密码:<input  type='password' name='password'/> <br/>"+
        "<input  type='submit' value='登录' /> <br/>"+
        "</form>"+
        "</html>");
});

//登录提交数据
app.post("/login",function (req,res) {

    //res.render()

    var username =req.body['username'];
    var password =req.body['password'];

    if(username=='admin' && password=='123456'){
        //登录成功
        //查询db中用户 ,存入session 设置session
        req.session.userinfo={
            username:username,password:password,age:22,liveCity:'北京'};

        res.send("恭喜,登录成功");
    }else{
        res.send("登录失败");
    }
});

app.get('/personalInfo',function (req,res) {
    //获取个人信息 从session中获取
    // var userinfo =req.session.userinfo;
    // if(!userinfo || userinfo=={}){
    //     res.send('您还没有登录呢');
    // }else{
    //     res.send('您的个人信息:<br/>'+JSON.stringify(userinfo));
    // }

    var userinfo =req.session.userinfo;
    if(!userinfo || userinfo=={}){
            res.send('您还没有登录呢')
    }else {
        //异步回调中  自动执行了res.end(result );
        //res.render("personalInfo.ejs",{'userinfo':userinfo});

        //手动书写render后的异步回调
        // res.render("personalInfo.ejs",{'userinfo':userinfo},function (err,result) {
        //     if (err) {
        //         console.log(err);
        //     }else{
        //         console.log(result);
        //         res.end(result);//
        //     }
        // });

        res.render("personalInfo2.ejs");// good

    }

});

//退出登录
app.get("/loginOut",function(req,res){

    //req.session.cookie.maxAge=0;  /*改变cookie的过期时间*/
    //销毁session
    req.session.destroy(function(err){
        console.log(err);
    });
    res.send('退出登录成功');
});

app.listen(3000);







关键字:  nodejs  express
评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号