基于session的用户登录识别
框架express
依赖的session模块express-session
1 主页面app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | var express = require( 'express' ); var path = require( 'path' ); var logger = require( 'morgan' ); var cookieParser = require( 'cookie-parser' ); var bodyParser = require( 'body-parser' ); var routes = require( './routes' ); var session = require( 'express-session' ); var index = require( './routes/index' ); var flash = require( 'connect-flash' ); var app = express(); // view engine setup app.set( 'views' , path.join(__dirname, 'views' )); app.set( 'view engine' , 'jade' ); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger( 'dev' )); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express. static (path.join(__dirname, 'public' ))); app.use(flash()); app.use(session({ name: 'kk' , // 设置 cookie 中保存 session id 的字段名称 secret: 'kk' , // 通过设置 secret 来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改 cookie: { maxAge: 2592000000 // 过期时间,过期后 cookie 中的 session id 自动删除 }, resave: false , saveUninitialized: true , //本应用中是将session存储到内存中。 //store: new MongoStore({// 将 session 存储到 mongodb //url: 'mongodb://localhost:27017/kk'// mongodb 地址 //}) })); app.use( function (req, res, next) { res.locals.user = req.session.user; 应用变量 res.locals.showname = req.session.showname; res.locals.success = req.flash( 'success' ); res.locals.error = req.flash( 'error' ); next(); }); routes(app); // catch 404 and forward to error handler app.use( function (req, res, next) { var err = new Error( 'Not Found' ); err.status = 404; next(err); }); // error handler app.use( function (err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get( 'env' ) === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render( 'error' ); }); module.exports = app; |
2 路由文件index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | module.exports = function (app) { app.get( '/' , function (req, res) { if (!req.session.user) { //如果未有用户登录,跳转至登录 res.redirect( '/login' ); } if (req.session.user) { res.redirect( '/home' ); //如果已经有用户登录,跳转至住页面 } }); app.use( '/login' , require( './login' )); //登录界面路由 app.use( '/home' , require( './home' )); // 主页面路由 app.use( '/logout' , require( './logout' )); //登出路由 // 404 page app.use( function (req, res) { if (!res.headersSent) { res.render( '404' ); } }); }; |
3 登录文件 login.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | var express = require( 'express' ); var router = express.Router(); var mysql = require( 'mysql' ); var md5 = require( 'md5' ); var connection = mysql.createConnection({host: '10.0.6.14' , user: 'root' , password: '123456' , database: 'cop_c' });<br> //连接数据库 connection.connect(); router.get( '/' , function (req, res, next) { key = req.query.key; if (!key || (key.length !== 32)) { //安全机制,为每一个登录用户分配一个32为的key,在登录时以 http://ip/login?key=12234...32进行登录,如果没有key或者key不是32位,显示空白页面。 res.send( '' ); } if (req.session.user) { //如果已有用户登录,则跳转至主页面。 res.redirect( '/home' ); } res.render( 'login' ); }); router.post( '/' , function (req, res, next) { var user = req.body.user; var xx = req.body.passwd; var passwd = md5(xx); //数据库中存储的是经过md5加密的密码。 sql = 'select showname from o_users where username="' + user + '" ' + 'and passwd= "' + passwd + '"and `key`="' + key + '"' ;<br> //showname是显示在主页面的用户名,存储在数据库中。 connection.query(sql, function (err, rows, fields) { if (err) throw err; if (rows.length==0) { //如果查询到数据库中有相匹配的用户,则登录,否则重新登录 req.flash( 'error' , '用户密码错误' ) res.redirect( '/login?key=' +key); } else { req.session.showname=rows[0].showname; req.session.user = user; req.flash( 'success' , '登录成功' ) res.redirect( '/home?key=' +key); } }); }); module.exports = router; |
4 主页面index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var express = require( 'express' ); var router = express.Router(); /* GET users listing. */ router.get( '/' , function (req, res, next) { if (req.session.user){ res.render( 'home' ,{name:req.session.showname}) } else { res.redirect( '/login' ) } }); module.exports = router; |
5 登出文件logout.js
1 2 3 4 5 6 7 8 9 | var express = require( 'express' ); var router = express.Router(); router.get( '/' , function (req, res, next) { req.session.user = null ; req.session.showname = null ; res.redirect( '/login' ) }); module.exports = router; |
6主页面模板 home.jade
1 2 3 4 5 6 7 | extends layout block content h1 #{showname} h1 #{success} h1 #{error} a(href= '/logout' )登出 p 这是主页 |
7登录模板 login.jade
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | extends layout block content .container h1 #{error} h1 #{success} form.form-signin(method="post", action="/login") h2 请登陆 .form-group label.sr-only 用户名 input.form-control#inputUser(placeholder="用户名", name="user", required, autofocus ) label.sr-only 密码 input.form-control#inputPassword(placeholder="密码", name="passwd",type="password" required, autofocus) button.btn.btn-lg.btn-primary.btn-block(type="submit") Sign in |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程