首先是导入session中间件(require)
然后是配置session中间件,使用三个属性(sercet(可用是任意字符串_这是)resave(固定写法)saveUninitialized(固定写法))--app.use()注册成为全局中间件
首先:新建文件夹:安装package.json——快速方法


安装需要的包:如果已经存在package.json里面安装的内容(直接允许 npm i 安装所有包——笔者没有安装好)express-session中间件,express
![]()
![]()
- //配置sessio中间件
- const session=require('express-session')
- app.use(session({
- secret:'cbdd',
- resave:false,
- saveUninitialized:true
- }))
(向session中存数据,(只有配置成功后才会用)可以通过req.session来访问和使用session对象,从而存储用户的关键信息)
可以通过req.session来读取数据
清空session
当用户需要退出登录的时候,调用req.session.destory()函数,只会清空当前用户的session,其他用户的不会清除,可以清空服务器保存的session信息
实现代码:登录成功的页面(index.html)
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>后台页面title>
- <script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js">script>
- head>
- <body>
- <h1>首页h1>
- <button id="Logout">退出登录button>
- <script>
- $(document).ready(
- (function () {
- // 页面加载完成后,自动发起请求,获取用户姓名
- $.get('/username', function (res) {
- // status 为 0 表示获取用户名称成功;否则表示获取用户名称失败!
- if (res.status !== 0) {
- alert('您尚未登录,请登录后再执行此操作!')
- location.href = './login.html'//返回url页面--进不去后台只能去登录界面
- } else {
- alert(res.msg+'登录'+res.username)
- }
- })
-
- // 点击按钮退出登录
- $('#Logout').on('click', function () {
- // 发起 POST 请求,退出登录
- $.post('/logout', function (res) {
- if (res.status === 0) {
- // 如果 status 为 0,则表示退出成功,重新跳转到登录页面
- location.href = './login.html'
- }
- })
- })
- })
- )
- script>
- body>
- html>
初始登录的页面login.html:
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>登录页面title>
- <script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js">script>
-
- head>
- <body>
- <form action="#" id="sa" method="post">
- 账号:<input type="text" name="username"><br>
- 密码:<input type="password" name="password">
- <input type="submit" value="登录">
- form>
-
- body>
- <script>
- $(document).ready(function(){
- //POST接口
- $('#sa').on('submit',function(){
- $.ajax({
- type:'POST',
- url:'http://127.0.0.1/login',
- data:$('#sa').serialize(),//传递表单数据给服务器
- success:function(res){
- if (res.status === 0) {
- location.href = './index.html'//登录成功
- } else {
- alert('登录失败!')
- location.href = './login.html'//重新刷新
- }
- },
-
- })
-
- })
-
-
- })
- script>
- html>
服务器的代码app.js
- //创建服务器
- const express=require('express')
- const session=require('express-session')
- const path=require('path')
- const app=express()
- const bodyPaser=require('body-parser')
- //配置sessio中间件
- app.use(session({
- secret:'cbdd',
- resave:false,
- saveUninitialized:true
- }))
-
-
- //托管静态资源 指定的静态目录中查找文件,并对外提供资源的访问路径,
- //因此存放在静态文件的目录名不会出现在url中
- //使用127.0.0.1访问 ccs html 的静态文件
- app.use(express.static(path.join(__dirname,'./pages')))
-
- //解析post请求
- app.use(bodyPaser.urlencoded({extended:false}))
-
-
- app.post('/login',(req,res)=>{
- //判断用户提交的登录信息是否正确
- if(req.body.username !=='admin'||req.body.password!=='0000'){
- return res.send(
- {status:1,msg:'登录失败'}
- )//服务器发送给客户端
- }
- //user追加自定义属性 值就是客户端提供给服务器的body数据(用户名和密码) a可以是任意字符
-
- //设置session
- req.session.a=req.body//将用户的信息 存储到session中
- //追加一个登录状态 表示已经登录了
- req.session.islogin=true//将用户的登录状态 存储到session中
- res.send({status:0,msg:'登录成功'})//服务器发送给客户端状态
-
- })
-
- //获取用户姓名
- app.get('/username',(req,res)=>{
- //判断用户是否登录
- if(!req.session.islogin){//使用原来的session的状态值进行判断
- return res.send({status:1,msg:'fail'})
- }
- res.send({status:0,msg:'success',username:req.session.a.username})
- })
-
- //退出登录的接口
- app.post('/logout',(req,res)=>{
- //销毁 session
- req.session.destroy()
-
- res.send({status:0,msg:'退出登录'})
- })
-
-
- app.listen(80,()=>{
- console.log('127.0.0.1启动成功')
- })


