当前位置: 首页 > article >正文

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

将用户信息存储或者更新到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.kler.cn/a/593856.html

相关文章:

  • 深度测评|杰和科技云终端VT813详细介绍+实测数据!
  • Java File 类与文件操作
  • Linux安装Elasticsearch集群-----docker安装es集群
  • 上线后bug常见问题及解决建议
  • 区块链(Blockchain)
  • 基于HTML5的连连看游戏开发实践
  • 鸿蒙NEXT开发实战教程—小红书app
  • day3 微机运算基础
  • 找素数(java)
  • 使用vue3和vue-router实现动态添加和删除cachedViews数组
  • MATLAB中orderfields函数用法
  • 对接股票金融数据源API
  • Dify 项目开源大模型应用开发平台
  • Ecovadis认证咨询辅导的分级体系是什么?
  • Prime: 1靶场渗透测试
  • 【Linux】——进程状态僵尸进程孤儿进程
  • Vue3 集成wangEditor 5
  • HarmonyOS Next~鸿蒙系统性能优化全解析:检测、分析与场景实践
  • Excel(函数进阶篇):函数与控件、定义名称、OFFSET函数、动态抓取图片
  • VNA操作使用学习-14 再测晶振特性