VSCode创建VUE项目(四)增加用户Session管理

news2025/3/22 0:45:42

将用户信息存储或者更新到Session

sessionStorage.setItem("userID",loginform.value.username);
sessionStorage.setItem('loginTime', Date.now());

获取Session信息

const storedUserInfo = sessionStorage.getItem('userID');
const loginTime = sessionStorage.getItem('loginTime');

移除Session信息

sessionStorage.removeItem("userID");
sessionStorage.removeItem('loginTime');

以下是代码修改:

效果:当进入登录页面的时候之前登录过且没有超时,直接跳转到登录后界面,登录后的界面长时间没有操作,直接跳转登录界面

LoginView.vue

<template>
   <div class="login-container dis-h">
      <div class="login-form  dis-h">
         <div class="dis-v left">
            <span> 欢迎~ </span>
            <span> VUE 新世界 </span>
         </div>
         <div class="dis-v right">
            <div class="username dis-h">
               <el-input placeholder="请输入用户名" v-model="loginform.username" />
            </div>
            <div class="pwd dis-h">
               <el-input type="password" placeholder="请输入密码" v-model="loginform.pwd" />
            </div>
            <div class="btn dis-h">
               <el-button size="large" style="width:220px;background-color:#626aef;color:#fff;font-weight:bold; "
                  @click="commit">登录</el-button>
            </div>

         </div>
      </div>
   </div>
</template>
<script setup>
import { ref, getCurrentInstance ,onMounted} from "vue"
import router from '@/router';
import { ElMessage } from 'element-plus';

const { appContext } = getCurrentInstance()
const axios = appContext.config.globalProperties.$axios;
var loginform = ref({
   username: "",
   pwd: ""
})

var commit = async () => {

   try {
      var response = await axios.get('/v1/aifunction/employee/info?emplCode=' + loginform.value.username);
      //保存日志信息
      console.log("--------------调用后台出参{"+loginform.value.username+"}--------------------");
      console.log(response);
      if (response && response.data) {
         if (response.data.defaultDeptCode == loginform.value.pwd) {
             // 将用户信息和登录时间存储到 sessionStorage
            sessionStorage.setItem("userID",loginform.value.username);
            sessionStorage.setItem('loginTime', Date.now());

            ElMessage.success("YES,成功啦啦啦啦啦!");
            router.replace("./about")
         }
         else {
            ElMessage.error("Sorry,请检查用户名和密码!失败!" + response.data.defaultDeptCode);
         }
      }
      else {
         ElMessage.error("Sorry,请检查用户名!没有该用户!");
      }
   } catch (error) {
      //登录失败,提示错误信息
      console.log(error)
      //this.$message.error('登录失败,请检查用户名和密码')
      ElMessage.error("Sorry,失败!" + error);
   }

}

onMounted(() => {
  const storedUserInfo = sessionStorage.getItem('userID');
  const loginTime = sessionStorage.getItem('loginTime');

  if (storedUserInfo && loginTime) {
    const currentTime = Date.now();
    const sessionTimeout = 2 * 60 * 1000; // 会话超时时间,这里设置为 2 分钟
    const elapsedTime = currentTime - parseInt(loginTime);

    if (elapsedTime < sessionTimeout) {
      router.replace("./about")
    }
  }
});
</script>
<style>
.login-container {
   width: 100vw;
   height: 100vh;
   background-image: url('../assets/background.jpeg');

   align-items: center;
   justify-content: center;
   background-repeat: no-repeat;
   /* 背景图片不重复 */
   background-size: cover;
   /* 背景图片覆盖整个div区域 */
   background-position: center;
   /* 背景图片居中显示 */
}

.login-form {
   width: 600px;
   height: 300px;
   /* background-color: red; */

}

.login-form .left {
   width: 50%;
   height: 100%;
   align-items: left;
   justify-content: center;
   font-size: 1.6rem;
   font-weight: bold;
   background: linear-gradient(to right bottom, rgba(136, 209, 234, 0.80) 5%, rgba(215, 193, 187, 0.80) 100%);
   color: #fff;
   text-indent: 1rem;
}

.login-form .right {
   width: 50%;
   height: 100%;
   background-color: rgba(255, 255, 255, 0.90);
   align-items: center;
   justify-content: center;
}

.login-form .username,
.pwd,
.btn {
   padding: 0.5rem 0;

}

/*水平排列子元素*/
.dis-h {
   display: flex;
}

/*垂直排列子元素*/
.dis-v {
   display: flex;
   flex-direction: column;
}
</style>

AboutView.vue

<template>
  <div class="about">
    <h1>This is an about page</h1>
  </div>
  <div>
    <el-button @click="loginOut">退出登录</el-button>
  </div>
</template>

<script setup>
import router from '@/router';
import { ref, onMounted } from 'vue';


var loginOut=function(){
  sessionStorage.removeItem("userID");
  sessionStorage.removeItem('loginTime');
  router.replace("/")
}

onMounted(() => {
  const storedUserInfo = sessionStorage.getItem('userID');
  const loginTime = sessionStorage.getItem('loginTime');

  if (storedUserInfo && loginTime) {
    const currentTime = Date.now();
    const sessionTimeout = 2 * 60 * 1000; // 会话超时时间,这里设置为 2 分钟
    const elapsedTime = currentTime - parseInt(loginTime);

    if (elapsedTime >= sessionTimeout) {
      loginOut();
    }
    else{
      sessionStorage.setItem('loginTime', Date.now());
    }
  }
});


</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性代数(1)用 excel 计算鸡兔同笼

线性代数excel计算鸡兔同笼 案例&#xff1a;鸡兔同笼问题的三种解法&#xff08;递进式教学&#xff09;一、问题描述二、方程式解法&#xff08;基础版&#xff09;步骤解析 三、线性代数解法&#xff08;进阶版&#xff09;1. 方程组转化为矩阵形式2. 矩阵求解&#xff08;逆…

Grokking System Design 系统设计面试问题

《Grokking the System Design Interview》列举了多个经典的系统设计题目,通常按照 不同的业务场景和技术难点 进行分类。以下是一些常见的分类和题目示例: 1. 社交网络类 设计 Twitter(支持关注/取关、推文、Feed 流) 设计 Facebook Messenger(即时聊天,支持在线/离线状…

hubilder打包ios app, 并上传TestFlight

目录 一 前提条件 不是该项目成员解决 1. 直接找到该项目的管理人员去设置你的账号 2. 直接重新生成APPID(一般不建议的&#xff0c;可以查看) 3. 如果是离职人员&#xff0c;可以让他将项目权限转让出来 - 如何转让应用 - DCloud问答 未申请ios证书和描述文件 APP ID 的…

Java集成MQTT和Kafka实现稳定、可靠、高性能的物联网消息处理系统

Java集成MQTT和Kafka实现高可用方案 1. 概述 在物联网(IoT)和分布式系统中,消息传递的可靠性和高可用性至关重要。本文将详细介绍如何使用Java集成MQTT和Kafka来构建一个高可用的消息处理系统。 MQTT(消息队列遥测传输)是一种轻量级的发布/订阅协议,适用于资源受限的设备和…

【总结篇】java多线程,新建线程有几种写法,以及每种写法的优劣势

java多线程 新建线程有几种写法,以及每种写法的优劣势 [1/5]java多线程 新建线程有几种写法–继承Thread类以及他的优劣势[2/5]java多线程-新建线程有几种写法–实现Runnable接口以及他的优劣势[3/5]java多线程 新建线程有几种写法–实现Callable接口结合FutureTask使用以及他的…

剑指 Offer II 107. 矩阵中的距离

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20107.%20%E7%9F%A9%E9%98%B5%E4%B8%AD%E7%9A%84%E8%B7%9D%E7%A6%BB/README.md 剑指 Offer II 107. 矩阵中的距离 题目描述 给定一个由 0 和 1 组成的矩阵 mat …

雅可比行列式

定义和推导 雅可比行列式&#xff0c;它是以n个n元函数的偏导数为元素的行列式。以下是雅可比式的推导过程&#xff1a; 二阶雅可比式的推导以二重积分中的极坐标变换为例&#xff0c;设 &#xff1a; &#xff0c;则 x 和 y 的全微分分别为&#xff1a; 可以将 dx 与 dy 视作…

【大模型基础_毛玉仁】3.2 上下文学习

目录 3.2 上下文学习3.2.1 上下文学习的定义3.2.2 演示示例选择1&#xff09;直接检索2&#xff09;聚类检索3&#xff09;迭代检索 3.2.3 性能影响因素 3.2 上下文学习 随模型训练数据规模和参数量的扩大&#xff0c;大语言模型涌现出了上下文学习&#xff08;In-Context Lea…

Oraclelinux问题-/var/log/pcp/pmlogger/目录超大

有套19c rac环境&#xff0c;操作系统是oracle linux 8.10&#xff0c;日常巡检时发现/var/log/pcp/pmlogger/目录超大&#xff0c;如下 [rootdb1 ~]# du -sh /var/log/pcp/pmlogger/* 468G /var/log/pcp/pmlogger/db 1.3G /var/log/pcp/pmlogger/oracle06-106 754M /…

【大语言模型_8】vllm启动的模型通过fastapi封装增加api-key验证

背景&#xff1a; vllm推理框架启动模型不具备api-key验证。需借助fastapi可以实现该功能 代码实现&#xff1a; rom fastapi import FastAPI, Header, HTTPException, Request,Response import httpx import logging# 创建 FastAPI 应用 app FastAPI() logging.basicConfig(…

学习笔记 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…

Microsoft Edge浏览器的取证分析(基于Chromium)

概述 早在2019年&#xff0c;微软就用Chromium替换了EdgeHTML浏览器引擎&#xff0c;这是微软支持谷歌Chrome浏览器的一个开源项目。通过切换到Chromium&#xff0c;Edge与Chrome浏览器共享一个共同的架构&#xff0c;这意味着用于Chrome浏览器调查的取证技术也适用于Edge。 …

汽车一键启动系统使用方便,舒适出行,轻松匹配

汽车一键启动系统 系统定义 移动管家汽车一键启动系统是装置在智能汽车上的一部分&#xff0c;是实现简约打火和熄火过程的一个按钮装置。它可以在原车钥匙锁头的位置改装&#xff0c;也能独立面板改装&#xff0c;现在很多高低配置的车辆都可安装。 功能特点 基本功能 启…

C语言复习笔记--数组

今天继续来浅浅推进一下C语言的复习,这次是数组的复习,话不多说,正文开始. 数组的概念 数组是⼀组相同类型元素的集合,一种自定义类型.数组中元素个数不能为0.数组分为⼀维数组和多维数组&#xff0c;多维数组⼀般⽐较多⻅的是⼆维数组. 下面从一维数组说起. 一维数组的创建和…

海康SDK协议在智联视频超融合平台中的接入方法

一. 海康SDK协议详解 海康SDK协议原理 海康SDK协议是海康威视为开发者提供的一套软件开发工具包&#xff0c;用于与海康设备&#xff08;如摄像头、NVR、DVR等&#xff09;进行通信和控制。其核心原理包括&#xff1a; 网络通信&#xff1a;基于TCP/IP协议&#xff0c;实现设…

腾讯云大模型知识引擎×DeepSeek:股票分析低代码应用实践

项目背景与发展历程 在金融科技快速发展的今天&#xff0c;股票分析作为投资决策的核心环节&#xff0c;正面临数据量激增和复杂性提升的挑战。传统股票分析依赖人工处理&#xff0c;效率低下且成本高昂&#xff0c;而人工智能&#xff08;AI&#xff09;的引入为这一领域带来…

【工具】C#防沉迷进程监控工具使用手册

一、软件简介 本工具用于监控指定进程的运行时长&#xff0c;当达到预设时间时通过声音、弹窗、窗口抖动等方式进行提醒&#xff0c;帮助用户合理控制程序使用时间。 软件在上篇文章。 二、系统要求 Windows 7/10/11.NET Framework 4.5 或更高版本 三、快速入门 1. 配置文件…

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…

强大的AI网站推荐(第一集)—— Devv AI

网站&#xff1a;Devv AI 号称&#xff1a;最懂程序员的新一代 AI 搜索引擎 博主评价&#xff1a;我的大学所有的代码都是使用它&#xff0c;极大地提升了我的学习和开发效率。 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x…

模块二 单元4 安装AD+DC

模块二 单元4 安装ADDC 两个任务&#xff1a; 1.安装AD活动目录 2.升级当前服务器为DC域控制器 安装前的准备工作&#xff1a; 确定你要操作的服务器系统&#xff08;Windows server 2022&#xff09;&#xff1b; 之前的服务器系统默认是工作组的模式workgroup模式&#xff08…