node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)

2020-06-17 07:03:23易采站长站整理

res.cookie("user",{"user":req.body.phone,"pwd":req.body.pwd},{maxAge:1000*60*60}); //登陆成功后将用户和密码写入Cookie,maxAge为cookie过期时间
req.session.user=req.body.phone; //服务器端session保存登陆的会话状态
res.render("perCenter",{u_tel:req.session.user});                        //ejs模板引擎渲染用户中心页面(perCenter.js),并将u_tel数据返回给前台
}
})
};

*perCenter.js视图页面如下,<%=u_tel%>为ejs语法的定义变量,直接将后台返回的u_tel嵌入视图页面中。


<div class="navBox container-fluid">
<div class="row">
<span class="col-lg-2 col-md-2 icon-lianxi contact alignLeft"> 010-65596969</span>
<span class="col-lg-2 col-md-2 icon-denglu contact col-lg-push-8 col-md-push-2 alignRight"><%=u_tel%></span>
</div>
</div>

7.至此完成整个的登录过程,并在用户点击了“记住密码”后,将用户信息写入cookie,并设置了cookie的过期时间。现在需要完善的是,在用户关闭了浏览器窗口后,cookie未过期的前提下,第二次登陆网站会直接显示登录状态,所以需要在服务器入口文件中(app.js)拦截服务器根目录路由,并根据cookie做出判断。


app.get("/",function(req,res){
if(req.cookies.user){ //cookie中存在用户信息,则直接返回登陆页面
res.render("perCenter",{u_tel:req.cookies.user.user})
}else{
res.redirect("index.html"); //否则正常显示网站的index.html页面
}

});

*附app.js配置文件全部内容:


const express = require("express");
const app = express();
const session = require("express-session");
const cookie = require("cookie-parser");
const ejs = require("ejs");
const per = require("./routes/perData.js");

app.configure(function(){
app.use(cookie());
app.use(session({
name:"final",
secret:"1234567",
cookie:{maxAge:10000}, //毫秒为单位
resave:true,
rolling:true
}));
app.set ("views",__dirname+"/views");
app.engine("html",ejs.__express);
app.set("view engine","html");
app.use(express.logger("dev"));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname+"/public"));
//app.use(express.favicon(__dirname+"/public/images/favicon.ico"));
app.use(express.errorHandler());
});
app.set("port",8889);

app.listen(app.get("port"),function(){
console.log("启动成功"+app.get("port"))
});

/*======路由分发======*/