会话时间管理类

/**
 * 会话时间管理类
 */
class SessionTimeManager {
  /**
   * 设置会话时间
   * @param {string} key - 存储键名
   * @param {number} duration - 持续时间(毫秒)
   */
  static setSessionTime(key, duration) {
    if (!key) throw new Error('键名不能为空')
    const expiryTime = Date.now() + duration
    sessionStorage.setItem(key, expiryTime.toString())
  }

  /**
   * 检查并更新会话时间
   * @param {string} key - 存储键名
   * @param {number} duration - 持续时间(毫秒),默认为24小时
   * @returns {boolean|string} - 返回true表示更新成功,'OneTime'表示首次设置,false表示未过期
   */
  static checkAndUpdateSession(key, duration = 86400000) {
    if (!key) throw new Error('键名不能为空')

    const storedTime = sessionStorage.getItem(key)
    const currentTime = Date.now()

    // 如果没有存储时间,设置并返回'OneTime'
    if (!storedTime) {
      this.setSessionTime(key, duration)
      return 'OneTime'
    }

    // 检查是否过期
    if (currentTime >= parseInt(storedTime)) {
      this.setSessionTime(key, duration)
      return true
    }

    return false
  }

  /**
   * 获取剩余时间
   * @param {string} key - 存储键名
   * @returns {number} - 剩余时间(毫秒),如果key不存在返回0
   */
  static getRemainingTime(key) {
    const storedTime = sessionStorage.getItem(key)
    if (!storedTime) return 0

    const remaining = parseInt(storedTime) - Date.now()
    return remaining > 0 ? remaining : 0
  }
}

// 使用示例
const SESSION_KEY = 'sessionTimeKey' // 统一使用一个键名
const SESSION_DURATION = 5000 // 5秒的会话时间

const flag = SessionTimeManager.checkAndUpdateSession(SESSION_KEY, SESSION_DURATION);
setTimeout(() => {
  console.log(flag , '-----flag')
  if (flag === true) {
    // 会话已更新,可以执行相关操作
    console.log('会话已更新')
  }
  if (flag === 'OneTime') {
    // 首次设置会话
    console.log('首次设置会话')
  } 
  if (flag === false) {
    // 会话未过期
    console.log('会话未过期,剩余时间:', SessionTimeManager.getRemainingTime(SESSION_KEY), 'ms')
  }
} ,1000)

  

posted @ 2025-03-11 10:46  ZeroShiro  阅读(9)  评论(0)    收藏  举报