• 在express中使用session认证


    配置中间件

    首先是导入session中间件(require)

    然后是配置session中间件,使用三个属性(sercet(可用是任意字符串_这是)resave(固定写法)saveUninitialized(固定写法))--app.use()注册成为全局中间件

    首先:新建文件夹:安装package.json——快速方法

     安装需要的包:如果已经存在package.json里面安装的内容(直接允许 npm i 安装所有包——笔者没有安装好)express-session中间件,express

     

    1. //配置sessio中间件
    2. const session=require('express-session')
    3. app.use(session({
    4. secret:'cbdd',
    5. resave:false,
    6. saveUninitialized:true
    7. }))

    使用session存数据

    (向session中存数据,(只有配置成功后才会用)可以通过req.session来访问和使用session对象,从而存储用户的关键信息)


    使用session取得数据

    可以通过req.session来读取数据


    清空session

    当用户需要退出登录的时候,调用req.session.destory()函数,只会清空当前用户的session,其他用户的不会清除,可以清空服务器保存的session信息 


    实现代码:登录成功的页面(index.html)

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>后台页面title>
    7. <script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js">script>
    8. head>
    9. <body>
    10. <h1>首页h1>
    11. <button id="Logout">退出登录button>
    12. <script>
    13. $(document).ready(
    14. (function () {
    15. // 页面加载完成后,自动发起请求,获取用户姓名
    16. $.get('/username', function (res) {
    17. // status 为 0 表示获取用户名称成功;否则表示获取用户名称失败!
    18. if (res.status !== 0) {
    19. alert('您尚未登录,请登录后再执行此操作!')
    20. location.href = './login.html'//返回url页面--进不去后台只能去登录界面
    21. } else {
    22. alert(res.msg+'登录'+res.username)
    23. }
    24. })
    25. // 点击按钮退出登录
    26. $('#Logout').on('click', function () {
    27. // 发起 POST 请求,退出登录
    28. $.post('/logout', function (res) {
    29. if (res.status === 0) {
    30. // 如果 status 为 0,则表示退出成功,重新跳转到登录页面
    31. location.href = './login.html'
    32. }
    33. })
    34. })
    35. })
    36. )
    37. script>
    38. body>
    39. html>

    初始登录的页面login.html:

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>登录页面title>
    7. <script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js">script>
    8. head>
    9. <body>
    10. <form action="#" id="sa" method="post">
    11. 账号:<input type="text" name="username"><br>
    12. 密码:<input type="password" name="password">
    13. <input type="submit" value="登录">
    14. form>
    15. body>
    16. <script>
    17. $(document).ready(function(){
    18. //POST接口
    19. $('#sa').on('submit',function(){
    20. $.ajax({
    21. type:'POST',
    22. url:'http://127.0.0.1/login',
    23. data:$('#sa').serialize(),//传递表单数据给服务器
    24. success:function(res){
    25. if (res.status === 0) {
    26. location.href = './index.html'//登录成功
    27. } else {
    28. alert('登录失败!')
    29. location.href = './login.html'//重新刷新
    30. }
    31. },
    32. })
    33. })
    34. })
    35. script>
    36. html>

    服务器的代码app.js

    1. //创建服务器
    2. const express=require('express')
    3. const session=require('express-session')
    4. const path=require('path')
    5. const app=express()
    6. const bodyPaser=require('body-parser')
    7. //配置sessio中间件
    8. app.use(session({
    9. secret:'cbdd',
    10. resave:false,
    11. saveUninitialized:true
    12. }))
    13. //托管静态资源 指定的静态目录中查找文件,并对外提供资源的访问路径,
    14. //因此存放在静态文件的目录名不会出现在url中
    15. //使用127.0.0.1访问 ccs html 的静态文件
    16. app.use(express.static(path.join(__dirname,'./pages')))
    17. //解析post请求
    18. app.use(bodyPaser.urlencoded({extended:false}))
    19. app.post('/login',(req,res)=>{
    20. //判断用户提交的登录信息是否正确
    21. if(req.body.username !=='admin'||req.body.password!=='0000'){
    22. return res.send(
    23. {status:1,msg:'登录失败'}
    24. )//服务器发送给客户端
    25. }
    26. //user追加自定义属性 值就是客户端提供给服务器的body数据(用户名和密码) a可以是任意字符
    27. //设置session
    28. req.session.a=req.body//将用户的信息 存储到session中
    29. //追加一个登录状态 表示已经登录了
    30. req.session.islogin=true//将用户的登录状态 存储到session中
    31. res.send({status:0,msg:'登录成功'})//服务器发送给客户端状态
    32. })
    33. //获取用户姓名
    34. app.get('/username',(req,res)=>{
    35. //判断用户是否登录
    36. if(!req.session.islogin){//使用原来的session的状态值进行判断
    37. return res.send({status:1,msg:'fail'})
    38. }
    39. res.send({status:0,msg:'success',username:req.session.a.username})
    40. })
    41. //退出登录的接口
    42. app.post('/logout',(req,res)=>{
    43. //销毁 session
    44. req.session.destroy()
    45. res.send({status:0,msg:'退出登录'})
    46. })
    47. app.listen(80,()=>{
    48. console.log('127.0.0.1启动成功')
    49. })

     

     

     

     

     

     

     

  • 相关阅读:
    信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(十):有损传输线在时域中的表现
    【矩阵】- “之”字形打印
    FeSoG论文笔记
    IC设计高级018:一种主动的流控实现方式
    RocketMQ源码阅读(十五)事务消息
    “构建高效的SpringMVC增删改查应用“
    Flink安装及简单使用
    MySQL数据库用户管理操作
    玩转Mysql系列 - 第23篇:mysql索引管理详解
    C语言之练手题
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126778092