全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

此内容需有node.js+express+mysql入门基础,若基础薄弱,可参考博主的其他几篇node.js博文:

1.下载Mysql数据库,安装并配置。创建用户表供登录使用:

2.node.js平台下Express的session与cookie模块包的配置:https://www./article/112190.htm

3.node.js平台下的mysql数据库配置及连接:https://www./article/110079.htm

完成前两步后需下载配置Ejs模块包:

*下载ejs模块包:npm install ejs --save-dev

*配置ejs:

  /*设置模板资源路径*/
  app.set ("views",__dirname+"/views");  //视图模板都在这个文件夹
  /*自定义文件后缀名,设置模板引擎*/
  app.engine("html",ejs.__express);
  app.set("view engine","html");  //设置模板引擎,代表视图后缀名是ejs

4.登录页面(login.html)

<div class="registerBg">
  <section class="registerBox bd">
    <div class="regTittle">登陆</div>
    <form method="post" action="/login.do">
      <input type="text" class="phone" placeholder="请输入手机号" id="phone" name="phone">
      <input type="password" placeholder="请输入密码" class="pwd" name="pwd" id="pwd"/>
      <div class="other bd">
        <label class="obey bd" ><input type="checkbox" id="remPwd" checked>&nbsp;记住密码</label><a class="forgetPwd">忘记密码?</a>
      </div>
      <button class="doReg" id="doLogin">登陆</button>
    </form>
  </section>
</div>

5.登陆界面点击登录按钮后,服务器入口文件(app.js)拦截路由/login.do

const per = require("./routes/perData.js");       //服务器入口文件引入perData.js
app.post("/Login.do",per.doLogin);

6.拦截路由后分发给路由处理文件(perData.js),perData.js暴露/login.do的接口,并提供处理函数。

////登录验证
exports.doLogin=function(req,res){
  console.log(req.body.phone);
  console.log(req.body.pwd);
  db.connect("select * from t_user where u_tel=? and u_pwd=?",[req.body.phone,req.body.pwd],function(err,data){
    console.log(data.length);
    if(data.length>0){
        //此处应有判断用户在login.html中是否点击了记住密码,本文方便思路理解,默认用户已点击“记住密码”
        //确定用户是否点击checkBox的方法:
        //1.原生js: document.getElementById("remPwd").checked
        //2.jquery: $("#remPwd").is(":checked")
      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"))
});


/*======路由分发======*/
app.get("/",function(req,res){
  if(req.cookies.user){
    res.render("perCenter",{u_tel:req.cookies.user.user})
  }else{
    res.redirect("index.html");
  }

});
app.post("/Login.do",per.doLogin);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# node  # cookie实现记住密码  # cookie  # nodejs  # node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能  # 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门  # express框架通过ejs模板渲染输出页面实例分析  # Express 框架中使用 EJS 模板引擎并结合 sill  # nodejs中的express-jwt的使用解读  # NodeJS Express使用ORM模型访问关系型数据库流程详解  # NodeJs Express框架操作MongoDB数据库执行方法讲解  # NodeJs Express路由使用流程解析  # NodeJs Express中间件使用流程解析  # express框架+bootstrap美化ejs模板实例分析  # 请输入  # 的是  # 都在  # 并在  # 并将  # 自定义  # 忘记密码  # 后将  # 两步  # 配置文件  # 大家多多  # 正常显示  # 几篇  # 博文  # 前提下  # 登陆界面  # 关闭了  # form  # method  # regTittle 


相关文章: 如何在景安云服务器上绑定域名并配置虚拟主机?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  制作网页的网站有哪些,电脑上怎么做网页?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  定制建站是什么?如何实现个性化需求?  建站主机服务器选型指南与性能优化方案解析  电商网站制作公司有哪些,1688网是什么意思?  北京企业网站设计制作公司,北京铁路集团官方网站?  上海网站制作开发公司,上海买房比较好的网站有哪些?  建站主机选择指南:服务器配置与SEO优化实战技巧  定制建站模板如何实现SEO优化与智能系统配置?18字教程  如何选择适合PHP云建站的开源框架?  实例解析Array和String方法  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  建站主机类型有哪些?如何正确选型  javascript中对象的定义、使用以及对象和原型链操作小结  建站主机空间推荐 高性价比配置与快速部署方案解析  如何零基础开发自助建站系统?完整教程解析  jQuery 常见小例汇总  如何选择建站程序?包含哪些必备功能与类型?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何用5美元大硬盘VPS安全高效搭建个人网站?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  制作网站的软件免费下载,免费制作app哪个平台好?  TestNG的testng.xml配置文件怎么写  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  如何在宝塔面板中修改默认建站目录?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  c# 在ASP.NET Core中管理和取消后台任务  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  建站主机选购指南:核心配置与性价比推荐解析  制作证书网站有哪些,全国城建培训中心证书查询官网?  如何在IIS服务器上快速部署高效网站?  建站之星客服服务时间及联系方式如何?  如何在IIS7上新建站点并设置安全权限?  建站之星如何配置系统实现高效建站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站之星代理费用多少?最新价格详情介绍  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  海南网站制作公司有哪些,海口网是哪家的?  股票网站制作软件,网上股票怎么开户?  Android滚轮选择时间控件使用详解  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  创业网站制作流程,创业网站可靠吗?  如何快速搭建响应式可视化网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。